我有一个遗留函数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
有什么想法吗?谢谢!