【问题标题】:node.js async/sync with For Loop, Query, and Additional function带有 For 循环、查询和附加功能的 node.js 异步/同步
【发布时间】:2017-10-01 13:34:27
【问题描述】:

您好,我遇到了以下序列的问题,我需要运行多个查询,这些查询彼此建立在一个 for 循环中,然后一旦获得最终结果来实现结果。我遇到了一个问题,我的 for 循环正在循环通过查询,我还需要在 findX 函数运行时停止代码。

我知道这是一个异步问题,但我不知道如何链接 Promise,或者使用 async npm 包需要循环依赖于前一个查询结果的查询。提前致谢。

    function findX(){
      //executes another query
    }

function solve(res, connection, info, requestArr, callback){

        var parentID = null;
        var obj = {};

        for (var i = 0; i <= requestArr.length; i++) {

          connection.query("SELECT WHERE ", [parentID, requestArr[i]], function(err, results) {
            if(results[0]['x']){
              var obj =  findX(x)
              break;
            }else{
                 parentID = results[0]['parentID'];
            }
          });
        }

    //Do stuff with obj only after the final result has been set in the for loop
      }

【问题讨论】:

标签: node.js asynchronous promise synchronization async.js


【解决方案1】:

您可以使用Async TimesSeries

// Pretend this is some complicated async factory
var createUser = function(id, callback) {
    callback(null, {
        id: 'user' + id
    });
};

// generate 5 users
async.times(5, function(n, next) {
    createUser(n, function(err, user) {
        next(err, user);
    });
}, function(err, users) {
    // we should now have 5 users
});

所以,在你的例子中会是这样的:

var iterations = requestArr.length - 1,
    parentID,
    obj;

var getResults = function (i, callback) {
    connection.query("SELECT WHERE ", [parentID, requestArr[i]], function (err, results) {
        if (results[0]['x']) {
            obj = findX(x);
            callback('done');
        }

        else {
            parentID = results[0]['parentID'];
            callback();
        }
    });
};

async.timesSeries(iterations, function (n, next) {
    getResults(n, function (err) {
        next(err);
    });
}, function (err) {
    // use obj
});

【讨论】:

  • 然后我会在另一个回调包装器或承诺中的查询回调函数中获得 findX 的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2014-02-06
  • 1970-01-01
  • 2011-11-08
  • 2015-04-18
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多