我对异步编程相当陌生,并试图理解为什么执行永远不会转到包含"if"的承诺之后链接的"then"块。谁能帮忙?
var uploadResourceToView = function (edit) {
var promises = [];
for (var i = 0; i < inputConfig.length; i++) {
promises.push(new Promise(function (resolve, reject) {
var name = 'hey';
new Promise(function (resolve) {
if (i == 0) {
return new pTree().renamePage('Home', name);
} else {
return edit.addPage(name, '3D')
}
})
// subsequent then()s are never executed
.then(function () {
console.log('why am I not been executed ? ');
return edit.addObject(object)
})
.then(function () {
return edit.addResource('test resource', true);
})
.then(resolve, reject);
});
}
return Promise.all(promises);
}
因为你从不为你内心的承诺打电话给resolve
或reject
。传递到 Promise
构造函数的执行器函数的返回值将被完全忽略。若要解决承诺,请调用new Promise
传递给执行者的resolve
或reject
回调。
就实际使整体功能正常工作而言,我猜测renamePage
和addPage
回报承诺。如果是这样,请直接使用它们,无需在该函数中的任何位置new Promise
:
var uploadResourceToView = function (edit) {
var promises = [];
for (var i = 0; i < inputConfig.length; i++) {
var name = 'hey';
var inner = i == 0 ? new pTree().renamePage('Home', name) : edit.addPage(name, '3D');
promises.push(inner
.then(function () {
console.log('why am I not been executed ? ');
return edit.addObject(object)
})
.then(function () {
return edit.addResource('test resource', true);
})
});
}
return Promise.all(promises);
}
更多:什么是显式承诺构造反模式,如何避免它?