gpt4 book ai didi

javascript - 为什么没有执行带有 'if' 的 Promise 之后的 block?

转载 作者:行者123 更新时间:2023-11-30 11:25:22 24 4
gpt4 key购买 nike

我对异步编程相当陌生,并且试图理解为什么执行永远不会进入包含“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 调用resolvereject。您传递给 Promise 构造函数的执行函数的返回值将被完全忽略。要解决 promise ,请调用 new Promise 传递给执行程序的 resolvereject 回调。


就实际使整个功能正常工作而言,我猜测 renamePageaddPage 会返回 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com