【问题标题】:how to return from promise.all in typescript?如何从打字稿中的 promise.all 返回?
【发布时间】:2021-10-23 02:47:48
【问题描述】:

我有一个 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 时,它返回列表。

【问题讨论】:

  • 你不能将 promise 转换为同步结果,你必须在某个时候等待它。

标签: typescript promise promise.all


【解决方案1】:

这是因为你的 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 块内,该块仅在承诺响应成功(也是异步的)后运行

【讨论】:

  • list_of_photos 将是一个承诺,因为 get_photos 是一个 async 函数。
  • 谢谢!但我有 2 个问题,我阅读了很多关于承诺的内容,但仍然不知道在得到对结果的响应之前 return photos_info 将如何运行,第二个问题 list_of_photos 仍然是一个承诺,那么我该如何返回列表?
猜你喜欢
  • 2022-01-03
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2016-12-12
  • 2020-08-06
  • 2019-09-08
  • 1970-01-01
相关资源
最近更新 更多