簡體   English   中英

Javascript promises內部承諾

[英]Javascript promises inside promise

假設我有一個返回值的函數調用,我需要遍歷該值並執行另一個返回結果的函數調用。 我需要將所有結果放入數組中,並在完成后顯示數組中的所有值,例如:

var myArray = [];
oneAsyncCall().then(function(val) {
    for (var i = 1; i < val; i++) {
        anotherAsyncCall()().then(function(result) {
            myArray.push(result);
        });
    }
});

一切完成后,我應該在哪里進行myeach迭代myArray?

你應該做這樣的事情。 做一個promise數組並使用Promise.all

var myArray = [];
const promiseArray = [];

oneAsyncCall.then(function(val){
    for (var i = 1 ; i < val ; i++) {
        promiseArray.push(anotherAsyncCall()());
    }

    Promise.all(promiseArray)
      .then(function(dataArrayFromPromises){
           //do things with dataArray which is an array of data from promiseArray promises
       });
});

使用Promise.all 您可以使用ES6 Promise polyfill或bluebird。

oneAsyncCall()
.then(function(val) {
    var promises = [];
    for (var i = 1; i < val; i++) {
        promises.push(anotherAsyncCall()());
    }
    return Promise.all(promises);    
})
.then(function(myArray) {
    // you get all result here
});

另外,我使用以下方法擺脫for語句。

Promise.all(
  Array(val-1).fill(undefined).map(() => anotherAsyncCall()())
)

因此可以將其重寫為

oneAsyncCall()
.then((val) => Promise.all(
   Array(val-1).fill(undefined)
   .map(() => anotherAsyncCall()())
))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM