node.js async/sync 具有 For 循环、查询和附加功能

node.js async/sync with For Loop, Query, and Additional function

你好,我对以下序列有疑问,我需要 运行 多个查询,这些查询在 for 循环中相互构建,然后在获得最终结果后实施结果。我遇到一个问题,我的 for 循环正在循环通过查询,我还需要在 findX 函数 运行ning.

时停止代码

我知道这是一个异步问题,但我不知道如何链接 promises,或者使用需要循环查询的异步 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
      }

您可以使用 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
});