【发布时间】:2020-04-13 02:28:01
【问题描述】:
我有一个调用外部 API 的异步函数。我在 API 变量中得到了结果,控制台日志记录产生了正确的结果。
function getSourceAndCountry(arr) {
let source = ``;
let country = ``;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] && arr[i][j + 1]) {
let API = `https://coronavirus-tracker-api.herokuapp.com/v2/locations?source=`;
source = arr[i][j];
API += `${source}`;
country = arr[i][j + 1];
API += `&country_code=${country}`;
console.log(API);
}
}
}
}
console.logging 调用后产生如下结果:getSourceAndCountry(sourceToCountry)
https://coronavirus-tracker-api.herokuapp.com/v2/locations?source=csbs&country_code=US
https://coronavirus-tracker-api.herokuapp.com/v2/locations?source=jhu&country_code=CA
https://coronavirus-tracker-api.herokuapp.com/v2/locations?source=jhu&country_code=IN
我尝试像这样使用 async-await:
async function oneTypeMultipleCountries(agent) {...
let response = Promise.resolve(result);
response.then((res) => {
console.log(res);
});
async function getSourceAndCountry(arr) {
let source = ``;
let country = ``;
let response;
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] && arr[i][j + 1]) {
let API = `https://coronavirus-tracker-api.herokuapp.com/v2/locations?source=`;
source = arr[i][j];
API += `${source}`;
country = arr[i][j + 1];
API += `&country_code=${country}`;
response = await getJSON(API);
}
}
}
return response;
}
控制台在 Promise 中记录 res 值会生成最后一个已解决的 Promise。我在这里想念什么。我想不通。
【问题讨论】:
-
呃,你的代码中只有一个
response变量,它只能保存一个值。如果您在循环中调用同步函数,它的行为将相同。您实际期望的结果是什么,一系列响应? -
@Bergi 它从 json 中返回一个外部 API。
标签: javascript async-await es6-promise asynchronous-javascript