簡體   English   中英

鏈接承諾導致Javascript

[英]Chaining promise results in Javascript

我有兩個返回Promise函數。 第一個返回我想要迭代的值列表,並對每個值進行第二次調用,累積到結果以發回。

function firstCall() {
 return new Promise(returns list of items);
}

function secondCall(someVal) {
  return new Promise(return single value);
}

function doSomething() {
  firstCall().then((response1) => {
    response1.someResult.map((item) => {
      secondCall(item).then((response2) => {
        //how to collect all?
      });
   });
  });
}

關於如何鏈接這些Promise返回調用並返回最終結果列表的任何建議?

我假設您使用的是ES6或某些polyfill(Bluebird等)。如果不是這樣,請更新您的問題。 如果是這樣,您可以將Promise.all()數組發送到Promise.all()並獲取一系列答案。

 function firstCall() { return new Promise((resolve, reject) => { resolve([1, 2, 3, 4, 5, 6]); }) } function secondCall(n) { return new Promise((resolve, reject) => { resolve(n * n); }) } function doSomething() { firstCall() .then(response1 => { console.log(response1); let promises = response1.map(r => secondCall(r)); Promise.all(promises) .then(response2 => { console.log(response2); }) }) } doSomething(); 

您可以通過傳遞將獲取結果的函數來鏈接promise:

function firstCall() {
  return Promise.resolve([1,2,3,4,5,6]);
};

function secondCall(array) {
  return Promise.all(array.map(square)).then(results => { return results });
}

function square(n){
  return Promise.resolve(n*n);
}

function logger(results){
  console.log(results);
}

function doSomething() {
  return firstCall().then(secondCall).then(logger);
  // you can also chain a .catch() that will bubble up from any chained promise
}

doSomething(); // return value: Promise { <pending> }, logged elements: [ 1, 4, 9, 16, 25, 36 ]

暫無
暫無

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

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