【发布时间】:2016-03-11 14:04:04
【问题描述】:
我希望有人可以帮助我更好地理解这些承诺。 我对他们很菜鸟。 我正在做一个带有承诺的数据库查询,当结果正确时获取一组数据。然后我需要做一个循环迭代这个数组并为每个元素执行删除操作,然后删除操作到另一个发送操作,当两个操作完成后,对数组的每个元素重复该过程,但必须完成每个元素在开始另一个数组元素之前完成操作和发送操作......使用我的代码没有发生,循环对每个元素进行删除操作而不等待删除和发送操作返回结果...... 操作 delete 和 shipping 都有结构
function x (makeQuery){
.......
var deferred = Q.defer();
.....
function(err, result) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve(result);
}
});
return deferred.promise;
}
我的代码是:
getElementInPostgres(makeQuery)
.then(function (obj) {
if (...){
results= obj['rows']
index =0
for (var i = 0; i < results.length; i++) {
var notification = {}
notification.tag='SubscriptionNode'
notification.indexSocket=results[i]['indexsocket']
notification.clientID=results[i]['clientid']
notification.callbackURL=results[i]['callbackurl']
notification.deploymentID=results[i]['deploymentid']
notification.clusterID=results[i]['clusterid']
notification.date=results[i]['registered']
var query = "DELETE FROM.....";
var params = [notification.indexSocket];
deleteInPostgres(query,params,notification)
.then(function (notification) {
if(notification.clientID){
sendInfoToPython(notification)
.then(function (obj) {
..........
}).fail(function (err) {
......
});
}
}).fail(function (err) {
......
});
}
}
else{
.........
}
}).fail(function (err) {
});
【问题讨论】:
-
我不使用 bluebird,我使用 Q.js
-
gist.github.com/neilk/6431795,Q.js的代码示例,可能对你有所帮助...
-
感谢 zangw 抽出宝贵时间,但这对我不起作用。最后我使用了异步进入循环
标签: javascript node.js promise q