对没有全局变量的多个事件使用promise回调

时间:2018-08-20 17:59:47

标签: javascript 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
      // ************************

    }
  })
}

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

1 个答案:

答案 0 :(得分:3)

我建议您使用docker run hello-world并传递一系列诺言。兑现所有承诺后,调用null将使您处理所有响应。

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

hello-world