Bluebird Promises:链式承诺的顺序异步执行,内部带有 for 循环
Bluebird Promises: sequential asynchronous execution of chained promises with for-loops inside
为了避免回调地狱,我链接了几个 (Bluebird Promise) 指令,每个 运行 一个异步 for 循环。当 for 循环仍然是 运行 时,链不会等待每个 for 循环完成,而是直接冲到显示 "DONE" 的末尾。我如何更改我的 for 循环,以便每个循环的承诺链 "waits" 在执行下一个 "then" 部分之前完成?
return Object1.Asyncmethod1(param1)
.then(function(result1) {
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});
promiseFor(function(count) {
return count < result1.length;
}, function(count) {
return Object.someOtherAsyncAction(someParam)
.then(function(res) {
return ++count;
});
}, 0)
}).then(function(result2) {
//another for loop just like the one above
}).then(function(result3) {
console.log("DONE");
res.json({
result: result3
});
}).catch(function(err) {
res.json({
result: 'error:' + err
});
});
您没有 return promiseFor
创建的 Promise。至此,链条被打破, .then(function(result2) {
不会等待该代码完成。 promiseFor(function(count) {
前需要加一个return
.then(function(result1) {
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});
return promiseFor(function(count) {
return count < result1.length;
}, function(count) {
return Object.someOtherAsyncAction(someParam)
.then(function(res) {
return ++count;
});
}, 0)
})
为了避免回调地狱,我链接了几个 (Bluebird Promise) 指令,每个 运行 一个异步 for 循环。当 for 循环仍然是 运行 时,链不会等待每个 for 循环完成,而是直接冲到显示 "DONE" 的末尾。我如何更改我的 for 循环,以便每个循环的承诺链 "waits" 在执行下一个 "then" 部分之前完成?
return Object1.Asyncmethod1(param1)
.then(function(result1) {
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});
promiseFor(function(count) {
return count < result1.length;
}, function(count) {
return Object.someOtherAsyncAction(someParam)
.then(function(res) {
return ++count;
});
}, 0)
}).then(function(result2) {
//another for loop just like the one above
}).then(function(result3) {
console.log("DONE");
res.json({
result: result3
});
}).catch(function(err) {
res.json({
result: 'error:' + err
});
});
您没有 return promiseFor
创建的 Promise。至此,链条被打破, .then(function(result2) {
不会等待该代码完成。 promiseFor(function(count) {
return
.then(function(result1) {
var promiseFor = Promise.method(function(condition, action, value) {
if (!condition(value)) return value;
return action(value).then(promiseFor.bind(null, condition, action));
});
return promiseFor(function(count) {
return count < result1.length;
}, function(count) {
return Object.someOtherAsyncAction(someParam)
.then(function(res) {
return ++count;
});
}, 0)
})