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的行为会有什么不同?它仍然会返回一个已解决的已执行承诺。@没有问题,代码的工作方式与它应该的完全相同。如果它所做的不是您想要的,那么您需要告诉我们您想要它做什么,这样我们就可以建议如何以不同的方式编写代码——如果您发布真正的代码,效果会更好。