我正在使用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
});

10-08 06:09