如何使用async.js简化Node.js中的回调代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用async.js简化Node.js中的回调代码相关的知识,希望对你有一定的参考价值。

我正在为我的项目使用MEAN技术。在Node.js中,我们需要使用callbacks。这里我有一个更新数据库中用户条目的函数。在存储到数据库之前,我需要首先验证数据然后执行一些检查。通过这样做,我的代码将变得非常复杂。我听说过async图书馆。

有人可以建议我如何降低此代码的复杂性?我不太了解异步,但它能真正解决我的问题吗?

我还必须执行一些其他检查,如授权。而且我不想写一个回调地狱。

任何建议都非常感谢。

谢谢你的时间。

    function updateUser(user_id, userData, cb){
      let response = {};

      //validate user data
      validate(userData, function(isPassed, validationResult){
        if(isPassed){
          //validate user id
          validateUserId(user_id, function(isValid){
            if(isValid){
              db.findById({ _id: user_id}, function(err, user){
                if(err){
                  response.status = 'error';
                  response.data = err;
                  cb(response);
                } else {
                  user.save(userData, function(err, numOfRow){
                    if(err){
                      response.status = 'error';
                      response.data = err;
                      cb(response);
                    } else {
                      response.status = 'success';
                      response.data = numOfRow;
                      cb(response);
                    }
                  })
                }
              })
            } else {
              response.status = 'error';
              response.data = 'Provided id is not valid';
              cb(response);
            }
          });
        } else {
          response.status = 'validationError';
          response.data = validationResult;
          cb(response);
        }
      });

    }

    function validate(data, cb){
      // checks some conditions here
      cb(false, [errors]);
    }

    function validateUserId(id, cb){
      // checks some conditions here
      cb(false);
    }
答案

最后,我得到了一篇博文,解决了我的问题https://blog.risingstack.com/mastering-async-await-in-nodejs/我希望它也能帮助别人。

谢谢。

以上是关于如何使用async.js简化Node.js中的回调代码的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - Async.js:并行执行如何工作?

node.js async.js nextTick vs setImmediate

node.js async.js nextTick vs setImmediate

Node / JS:奇怪的嵌套回调函数

调试 node.js 脚本时,VSCode 在“async_hooks.js”上的不可见断点处停止

我们如何将字符串从回调函数返回到 node.js 中的根函数?