我对异步编程相当陌生,并且试图理解为什么执行永远不会进入包含“if”的 promise 之后链接的“then” block 。有人可以帮忙吗?
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);
}
最佳答案
因为你永远不会为你内心的 promise 调用resolve
或reject
。您传递给 Promise
构造函数的执行函数的返回值将被完全忽略。要解决 promise ,请调用 new Promise
传递给执行程序的 resolve
或 reject
回调。
就实际使整个功能正常工作而言,我猜测 renamePage
和 addPage
会返回 promise 。如果是这样,直接使用它们,不需要在该函数的任何地方使用 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);
}
更多:What is the explicit promise construction antipattern and how do I avoid it?
关于javascript - 为什么没有执行带有 'if' 的 Promise 之后的 block?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239090/