我正在使用Express JS(Express 4)框架创建API。我对NodeJS很陌生,所以我想知道在同一函数内执行多个异步调用的最佳方法。
对于此示例,我的登录控制器中有一个名为Login的函数。在此函数内部,假设我必须进行很多异步调用来验证用户身份,保存登录信息和类似功能。
但是对于某些异步调用,应从先前的异步调用中获取要处理的数据(它们是从属函数),而某些函数并非如此。
现在,这就是我打电话的方式。
exports.login = function (req, res) {
var user = {
email: '[email protected]',
password: 'password'
};
//Async call 1
Login.authUser(user, function (err1, rows1) {
var user_id = rows1[0].id;
//Async call 2 (depends on async call 1 for user_id)
Login.fetchUserDetails(user_id, function (err2, rows2) {
//Async call 3
Login.updateLoginInfo(param3, function (err3, rows3) {
//Some functionality occurs here then async call 4 happens
//Async call 4
Login.someOtherFunctionality(param4, function (err4, rows4) {
//return response to user
res.json({
success: true
});
});
});
});
});
};
现在,所有这些异步调用都已嵌套。我还有其他方法可以做到吗?
附言:我没有在此示例中添加错误处理
最佳答案
您也可以使用promise。它将使您的语法更加美观。您的代码看起来像
Login.authUser(user).
then(fetchUser).
then(updateLoginInfo).
then(someOtherFunctionality).
catch(function(error){
//log your error or whatever
});