0

我有一个 url 列表,我需要获取所有这些,所以我使用了 fetch 然后 promise.all,但是,我不知道如何返回 promise 的结果。

let photos_info = [];
function get_photos(urls) {
  var promises = urls.map((url) => fetch(url).then((y) => y.json()));
  Promise.all(promises).then((results) => {
  
  console.log("results:", results);
  photos_info = [...results];
  console.log("photos_info:", photos_info );
  });

  return photos_info ;
}

const list_of_photos = get_photos(urls);
console.log("result of the function", list_of_photos);

为什么 list_of_photos 返回一个空列表,但是在函数内部打印 photos_info 时,它返回列表。

4

1 回答 1

0

这是因为你的 Promise.all 异步运行

所以return photos_info将在它得到响应之前运行以导致未定义。

将其更改为:

let photos_info = [];
async function get_photos(urls) {
  var promises = urls.map((url) => fetch(url).then((y) => y.json()));
  await Promise.all(promises).then((results) => {
  
  console.log("results:", results);
  photos_info = [...results];
  console.log("photos_info:", photos_info );
  });

  return photos_info ;
}

const list_of_photos = get_photos(urls);
console.log("result of the function", list_of_photos);

您在控制台日志中获得响应的原因是它在一个then块内,该块仅在承诺响应成功后运行(这也是异步的)

于 2021-08-22T11:44:42.977 回答