使用Async NPM模块

时间:2016-04-21 18:12:06

标签: javascript node.js node-async

所以......我最近遇到了这个节点模块:async。对于我下面的情况,我只需要一点“表演和讲述”或最佳实践方法。您可以在下面看到我的函数GetBearerToken,该函数在没有问题的情况下使用参数{bearer_token:token}

我的问题是变量ss。我想在此函数之外使用它并将其传递给另一个函数来执行某些操作。当然,当我尝试访问ss时,它是未定义的。我已经尝试了一些使文档中所示的工作方式,但我显然缺少一些东西。所以任何帮助都会很棒......谢谢

GetBearerToken({
      bearer_token: token
    }, function(error, result) {
      if (error) throw error;
      if (result) {
        var resultset
        var i;
        for (i = 0; i < result.length; i++) {
          resultset = (simpleObjectify(result[i].meta, result[i].rows))
        }

        var jstring = JSON.stringify(resultset);
        var obj = JSON.parse(jstring);
        var ss = obj[0].uuid;
        console.log(ss)
      })

在功能ss之外是undefined

1 个答案:

答案 0 :(得分:1)

首先阅读本文

What is the scope of variables in JavaScript?

您可以尝试使用.waterfall方法

  

瀑布(任务,[回调])

     

运行函数的tasks数组,每个函数都通过它们   结果到阵列中的下一个。但是,如果任何任务通过了   错误到自己的回调,下一个函数没有执行,并且   主要的回调会立即调用错误。

您要完成的一个示例

async.waterfall([
      function(callback) {

        GetBearerToken({
              bearer_token: token
            }, function(error, result) {
              if (error) throw error;
              if (result) { // *note* don't forget to handle the result properly if an error occurs or the result is not what you expected.
                var resultset
                var i;
                for (i = 0; i < result.length; i++) {
                  resultset = (simpleObjectify(result[i].meta, result[i].rows))
                }

                var jstring = JSON.stringify(resultset);
                var obj = JSON.parse(jstring);
                var ss = obj[0].uuid;
                callback(null, ss); // call the next callback in waterfall with ss value
              }
            )
          },
          function(arg1, callback) {
            // arg1 now equals ss value 
            callback(null,'all completed');
          }
      ],
      function(err, result) {
        // result now equals 'all completed'
      });

但是因为上面的代码似乎已朝着错误的方向迈出了一步 来调试。但是看看.waterfall的例子,它打破了回调,然后调用.waterfall方法。