一个涉及 Javascript 回调函数的问题,请大牛帮忙看看

2015-10-16 10:05:49 +08:00
 bru
app.reg(regInfo, function(err) {
    if (err) {
        toast(err);
        return;
    }
    toast('注册成功');
    // 注册成功,继续处理业务
});
app.reg = function(regInfo, callback) {
    if (regInfo.account.length < 5) {
        return callback('用户名最短需要 5 个字符');
    }
    if (regInfo.password.length < 6) {
        return callback('密码最短需要 6 个字符');
    // 向服务器发送注册请求
    user.signUp(regInfo, {
        success: function(user) {
            // 注册成功,可以使用了.
        },
        error: function(user, error) {
            // 失败了
        }
    });
    return callback();
};

问题: 如何在服务器返回失败以后再返回callback('服务器注册失败')?

谢谢大家!

2171 次点击
所在节点    JavaScript
8 条回复
will0404
2015-10-16 10:10:37 +08:00
```
app.reg = function(regInfo, callback) {
if (regInfo.account.length < 5) {
return callback('用户名最短需要 5 个字符');
}
if (regInfo.password.length < 6) {
return callback('密码最短需要 6 个字符');
// 向服务器发送注册请求
user.signUp(regInfo, {
success: function(user) {
// 注册成功,可以使用了.
},
error: function(user, error) {
// 失败了
return callback();
}
});

};
```
will0404
2015-10-16 10:12:33 +08:00
怎么不支持 markdown 你要的不是发 callback 放到回调里就好了吗
chairuosen
2015-10-16 10:14:05 +08:00
把倒数第二行 return callback()那行删了
user.signUp 的 success 和 error 里分别调 callback
bru
2015-10-16 11:10:08 +08:00
@chairuosen OK, 解决了,我之前也是在回调里面用了 return callback(); 直接调 callback 就可以了,谢谢~~
Altman
2015-10-16 11:11:09 +08:00
用用 Promise 吧, 实在看不下去 callback 回调了
bru
2015-10-16 11:25:39 +08:00
@Altman 引入 Promise 对于原有的代码改动的工作主要有哪些?
morethansean
2015-10-16 11:34:42 +08:00
没有 callback 了。
app.reg = function (regInfo) {
if (regInfo.account.length < 5) {
return Promise.reject('用户名最短需要 5 个字符');
}
if (regInfo.password.length < 6) {
return Promise.reject('密码最短需要 6 个字符');

return user.signUp(regInfo);
};

// 使用
app.reg(regInfo)
.then((ret) => {
// 成功了
})
.catch((ex) => {
// 失败了
});

// es7
try {
await app.reg(regInfo);
} catch (ex) {
// 失败了
return;
}
// 成功,继续业务代码
malcolmyu
2015-10-16 11:45:39 +08:00
要么使用回调要么使用 promise

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX