我目前正在從 API 獲取資料,并且需要執行多個 GET 請求(使用 axios)。在所有這些 GET 請求完成后,我回傳一個已解決的承諾。
但是,我需要根據陣列串列自動執行這些 GET 請求:
function do_api_get_requests() {
return promise = new Promise(function(resolve, reject) {
API_IDs = [0, 1, 2];
axios.get('https://my.api.com/' API_IDs[0])
.then(data => {
// Do something with data
axios.get('https://my.api.com/' API_IDs[1])
.then(data => {
// Do something with data
axios.get('https://my.api.com/' API_IDs[2])
.then(data => {
// Do something with data
// Finished, resolve
resolve("success");
}
}
}
}
}
這可行,但問題是 API_IDs 并不總是相同的陣列,它會改變。所以我不確定如何自動鏈接這些請求。
uj5u.com熱心網友回復:
既然您說它可能是一個可變長度陣列并且您顯示了請求的順序,您可以使用 async/await 回圈遍歷陣列:
async function do_api_get_requests(API_IDS) {
for (let id of API_IDS) {
const data = await axios.get(`https://my.api.com/${id}`);
// do something with data here
}
return "success";
}
而且,由于您說 API id 串列是可變的,所以我將其設定為可以傳遞給函式的引數。
如果您想并行運行所有 API 請求(這對于小型陣列可能沒問題,但對于大型陣列可能會很麻煩)并且您不需要按特定順序運行它們,您可以這樣做:
function do_api_get_requests(API_IDS) {
return Promise.all(API_IDS.map(async (id) => {
const data = await axios.get(`https://my.api.com/${id}`);
// do something with data here for this request
})).then(() => {
// make resolved value be "success"
return "success";
});
}
根據您的情況,您也可以使用Promise.allSettled(). 由于您沒有顯示回傳結果,因此尚不清楚這是否有用。
uj5u.com熱心網友回復:
您可以使用Promise.all()方法同時執行所有 API 請求,并在所有請求都解決時解決。
function do_api_get_requests() {
const API_IDs = [0, 1, 2];
let promises = [];
for (const id of API_IDS) {
promises.push(axios.get(`https://my.api.com/${id}`));
}
return Promise.all(promises);
}
uj5u.com熱心網友回復:
如果你使用 Bluebird.js(一個更好的 Promise 庫,并且比內置的更快Promise),你可以使用Promise.each()、Promise.mapSeries()或Promisme.reduce()來做你想做的事。
http://bluebirdjs.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/424020.html
標籤:javascript 节点.js 承诺 es6-承诺 链
