解决for循环中的promise

Nit*_*tya 4 javascript node.js promise

我正在尝试使用for循环来读取JSON对象以格式化JSON数据,并通过将格式化的响应放入模型对象将其发送回客户端.

在for循环中,我基于几个条件处理两个承诺.有两个函数,每个函数都有一个promise返回.如何在所有promise都解决之后获取我的最终数据?提前致谢.

for (var i = 0, i<jsonData.length; i++){
   if(someCOndition){
       getSomeData().then(function(data){
          //some operation using data
       })
   }
  if(someOtherCOndition){
       getSomeOtherData().then(function(data){
          //some operation using data
       })
   }
}
Run Code Online (Sandbox Code Playgroud)

mdz*_*kon 9

Promise.all([ promise1, promise2 ])(在MDN上的Promise.all())在标准JS Promises(ES2015 +)的情况下.它返回一个新的promise,一旦所有传递的promises得到解决,它就会得到解决.但要注意 - 当至少一个承诺被拒绝时,它会立即被拒绝(它不会等待任何其他承诺).


Red*_*edu 5

您可以执行以下操作;

var promises = [],
  JSONData_1 = ["chunk_11","chunk_12","chunk_13"],
  JSONData_2 = ["chunk_21","chunk_22","chunk_23"],
 getJSONData = (b,i) => new Promise((resolve,reject) => setTimeout(_ => b ? resolve(JSONData_1[i])
                                                                          : resolve(JSONData_2[i]),1000));

for (var i = 0; i < JSONData_1.length; i++){
   if(Math.random() < 0.5) promises.push(getJSONData(true,i));
   else promises.push(getJSONData(false,i));
}
Promise.all(promises)
       .then(a => console.log(a));
Run Code Online (Sandbox Code Playgroud)