将回调函数转换为承诺并串行执行

时间:2015-10-21 22:18:09

标签: javascript node.js promise q

我有一个遗留函数callApiCallback,它接受​​一个回调函数。我已将其转换为promise函数,然后在从数据库返回的一组行上调用它,但它不会按顺序执行,并且在callApi函数系列开始执行之前,我的主要承诺的下一步已到达。

代码

var counter = 0;

function callApi(params) {  
  var deferred = Q.defer();

  counter++;
  console.log('Call API: ' + counter);

  callApiCallback(params, function (result, error) {
    if (error) {
      deferred.reject(new Error('API error'));
    } else {
      deferred.resolve(result);
    }
  });

  return deferred.promise;
});

callDatabase()
  .then(function (rows) {
    console.log('Start');
    return Q.allSettled(rows.map(function (row) {
      return callApi(params);
    }));
  })
  .done(function () {
    console.log('End');
  });

预期产出

Start
1
2
...
N
End

输出

Start
End
1
2
...
N

有什么想法吗?谢谢!

0 个答案:

没有答案