gpt4 book ai didi

javascript - 在没有全局变量的情况下对多个事件使用 promise 回调

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

我有一个包含在函数中的 promise 。我将使用不同的输入参数多次调用此函数。每次 promise 解决时,我都会将解决的值推送到存储阵列中。

当我调用的所有 promise 都已解决后,我将在其他函数中使用此存储数组。

是否有任何干净的方法可以在不使用“global-ish”变量的情况下进行设置?

下面的代码是我能想到的唯一方法:

// Set global-ish variables that can be referenced from multiple functions
var storageArray = [];
var numberOfPromiseCalls = 10;
var promiseCallsCount = 0;

// Setup promise wrapper
function promiseWrapper(inputParams){
return new Promise(function(resolve, reject) {
// awesome stuff at work here using inputParams
resolve(desiredOutput);
}
})

// call promise 10 times
for(i=0;i<numberOfPromiseCalls;i++){

// actual promise call
promiseWrapper(inputParams[i]).then(function (desiredOutput) {

// push resolve to storage array
storageArray.push(desiredOutput);

// test if this resolve is the "last" resolve of all the promises we called
promiseCallsCount++;
if(promiseCallsCount == numberOfPromiseCalls){

// ************************
// call a function that can work with the final storageArray
// ************************

}
})
}

我的意思是,上面的代码可以工作,但伙计,感觉很难看。存在很多歧义,您必须跟踪变量层次结构。有更好的方法吗?

最佳答案

我建议您使用 Promise.all 来传递您的 promise 数组。调用 then 将让您在所有 promise 都已解决时处理所有响应。

引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

for (i=0;i<numberOfPromiseCalls;i++){
storageArray.push(promiseWrapper(inputParams[i]));
}

Promise.all(storageArray).then(responses => {
// responses is an array of all promises responses
});

关于javascript - 在没有全局变量的情况下对多个事件使用 promise 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936200/

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