Javascript JS承诺:承诺在分配给变量时正在执行/解析
我试图给一个变量分配一个新的承诺,然后将该变量推送到一个数组,从而得到一个承诺数组。然后,我希望稍后通过单击按钮来执行这个承诺数组 但是当把承诺赋给变量时,它只是直接执行Javascript JS承诺:承诺在分配给变量时正在执行/解析,javascript,promise,Javascript,Promise,我试图给一个变量分配一个新的承诺,然后将该变量推送到一个数组,从而得到一个承诺数组。然后,我希望稍后通过单击按钮来执行这个承诺数组 但是当把承诺赋给变量时,它只是直接执行 ProcessExamples(){ swal({ title : 'Get Examples?', confirmButtonText: 'Yes', }).then( aRes => { if( aRes.value ){ let
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;
}
当承诺数组返回到ProcessExamples方法时,所有承诺都已解决。这不是我想要的,我能做什么
我尝试用函数resolve,reject{}替换lambda resolve,reject=>{},但没有任何效果
我发现它在被推到Promises数组之前就已经解决了,所以我假设它是在被分配到lPromise时发生的
但是当把承诺赋给变量时,它只是直接执行
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(){
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构造函数所做的,它立即执行回调函数,并将解析和拒绝函数传递给它,回调完成后可以调用这些函数
如果您想要稍后可以执行的东西,那么使用函数而不是承诺。函数可以返回一个承诺。这真的重要吗?如果要确保其中存在某种延迟,请执行setTimeoutresolve,5000。否则,你有一个坚定的承诺,你可以把一些东西连在一起。。。无论何时,只要你愿意……我随后就会执行这一系列承诺——这不是承诺的工作方式。承诺表示异步任务的结果,而不是计算本身,它无法执行。改用函数调用。所有承诺都已解决-好吧,您正在使用resolvetrue立即解决它们。你还指望什么时候会发生这种事?不,正如我所说的,承诺不能从外部执行。所有这些承诺。所做的就是创建一个新的承诺,它遵守数组中的承诺。但即使Promise.alllAllPromises确实执行了它们,ExampleClass.GetExamplePromises的行为会有什么不同?它仍然会返回一个已解决的已执行承诺。@没有问题,代码的工作方式与它应该的完全相同。如果它所做的不是你想要的,你需要告诉我们你想要它做什么,这样我们可以建议如何以不同的方式编写代码——如果你发布真实的代码,效果会更好。这真的重要吗?如果要确保其中存在某种延迟,请执行setTimeoutresolve,5000。否则,你有一个坚定的承诺,你可以把一些东西连在一起。。。无论何时,只要你愿意……我随后就会执行这一系列承诺——这不是承诺的工作方式。承诺表示异步任务的结果,而不是计算本身,它无法执行。改用函数调用。所有承诺都已解决-好吧,您正在使用resolvetrue立即解决它们。你还指望什么时候会发生这种事?不,正如我所说的,承诺不能从外部执行。所有这些承诺。所做的就是创建一个新的承诺,它遵守数组中的承诺。但即使Promise.alllAllPromises确实执行了它们,ExampleClass.GetExamplePromises的行为会有什么不同?它仍然会返回一个已解决的已执行承诺。@没有问题,代码的工作方式与它应该的完全相同。如果它所做的不是您想要的,那么您需要告诉我们您想要它做什么,这样我们就可以建议如何以不同的方式编写代码——如果您发布真正的代码,效果会更好。