我正在使用 API 來檢索資料(幾個機場的),基于他們的機場代碼......
async function airpt(codes){
const airportCredential = {
"method": "GET",
"headers": {
"x-rapidapi-host": "airport-info.p.rapidapi.com",
"x-rapidapi-key": "xxxx"
}
}
return Promise.all(
codes
.map(code =>
fetch("https://airport-info.p.rapidapi.com/airport?iata=" code,airportCredential)
.then(r => r.json())
)
);
}
像這樣的呼叫會airpt(['JFK','LAX']產生一個結果如下的陣列:
Array(2)
0: {id: 3406, iata: 'JFK', icao: 'KJFK', name: 'John F. Kennedy International Airport', location: 'New York City, New York, United States', …}
1: {id: 4044, iata: 'LAX', icao: 'KLAX', name: 'Los Angeles International Airport', location: 'Los Angeles, California, United States', …}
length: 2
這作業正常。但是我如何從這個函式回傳一個(單個)承諾,并將所有資料打包到一個物件中,該物件使用輸入codes作為鍵?
我知道如何將陣列轉換為物件:
array.reduce((obj, item) => {
return {
...obj,
[item['iata']]: item,
};
}, {});
我知道怎么做,使用.then(...)后Promise.all()已經解決。但是,我希望將重新打包到一個物件中作為異步函式的一部分。
uj5u.com熱心網友回復:
你似乎已經有了你需要的部分,所以希望你只需要看到它們放在一起。下面是在 promise.all 之后執行一些額外代碼,并基于陣列回傳一個物件的樣子:
async function airpt(codes){
const airportCredential = {
"method": "GET",
"headers": {
"x-rapidapi-host": "airport-info.p.rapidapi.com",
"x-rapidapi-key": "xxxx"
}
}
const array = await Promise.all(
codes
.map(code =>
fetch("https://airport-info.p.rapidapi.com/airport?iata=" code,airportCredential)
.then(r => r.json())
)
);
return array.reduce((obj, item) => {
return {
...obj,
[item['iata']]: item,
};
}, {});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362131.html
標籤:javascript 异步 承诺.all
