【发布时间】:2020-03-17 19:14:28
【问题描述】:
我正在尝试将 new Promise() 分配给一个变量,然后将该变量推送到一个数组,从而产生一个承诺数组。然后我想稍后在单击按钮时执行这一系列承诺。
但是当将Promise 分配给变量时,它会立即执行。
ProcessExamples(){
swal({
title : 'Get Examples?',
confirmButtonText: 'Yes',
}).then( aRes => {
if( aRes.value ){
let lAllPromises = ExampleClass.GetExamplePromises();
}
});
}
static GetExamplePromises(){
let lPromises = [];
Examples.forEach( aExample => {
let lPromise = new Promise( ( resolve, reject ) => {
resolve( true );
});
lPromises.push( lPromise );
});
return lPromises;
}
当 Promise 数组返回到 ProcessExamples 方法时,所有的 Promise 都已解决。这不是我想要的,我该怎么办?
我尝试将 lambda ( resolve, reject ) => {} 替换为 function( resolve, reject ) {} - 没有任何效果。
我已经确定它在被推送到 Promises 数组之前就已经解决了,所以我假设它在分配给 lPromise 时发生了
【问题讨论】:
-
真的很重要吗?如果您想确保那里有某种延迟,请执行
setTimeout(resolve, 5000)。否则,你有一个已解决的承诺,你可以随时链接一些东西(p.then(...))...... -
"然后我想稍后执行这个承诺数组" - 这不是承诺的工作方式。承诺代表异步任务的结果,而不是计算本身,它不能被“执行”。改用函数调用。
-
"所有承诺都已解决" - 好吧,您将立即使用
resolve(true)解决它们。您还预计什么时候会发生这种情况? -
不,正如我所说,承诺不能从外部执行。
Promise.all所做的只是创建一个新的 Promise 来观察数组中的 Promise。但即使Promise.all(lAllPromises)确实“执行了它们”,ExampleClass.GetExamplePromises()的行为又会有什么不同呢?它仍然会返回一个已经解决(“已执行”)的承诺。 -
@KesWalker 没有问题,代码完全可以正常工作。如果它所做的不是您想要的,您需要告诉我们您希望它做什么,以便我们可以建议如何以不同的方式编写代码 - 如果您发布您的真实代码,效果会更好。
标签: javascript promise