[英]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.