2017-09-19 105 views
0

如何保證循環?

var arr = ["node.js", "Java", "C#"]; 
 
var newArr = []; 
 

 
let promise = new Promise((resolve, reject) => { 
 

 
     for(let i = 0; i < arr.length; i++) { 
 
      setTimeout(() => { 
 
       newArr.push(arr[i]) 
 
       resolve(newArr); 
 
      }, 1000); 
 
     } 
 

 
}); 
 

 
promise 
 
     .then(result => { 
 
      alert(result); 
 
     } 
 
);

現在,第一循環後警報數據。如何在承諾完成後通過整個循環顯示來自異步操作的數據?

期望的行爲:在異步模式下向newArr添加數據,並在循環結束後顯示它。

+0

那麼你只能解決一次.....所以,你將不得不等待,直到所有的超時完成.. .. – epascarello

+0

'''Promise.all'''就是你想要的 – Wainage

+0

@epascarello你能告訴我怎麼做嗎? –

回答

2

你需要有多個與承諾promise all

const myPromises = []; 
 
for (let i=0; i<5; i++) { 
 
    myPromises.push(new Promise((resolve, reject) => { 
 
     setTimeout(() => { 
 
     console.log("done", i); 
 
     resolve(i) 
 
     } , i*500); 
 
    })); 
 
} 
 

 
Promise.all(myPromises).then(values => { 
 
    console.log("All: ", values) 
 
});