Promise,await / async和Promise.all:什么都解决了?

我正在编写连接到API的节点代码,以获取一些数据。我使用JS Promise来调用API并获取解析部分的数据。现在,我需要调用不同的端点以获取完整的数据。所以我最终选择了Promise.all。但是我不能使它工作。我读到异步函数也返回一个Promise。因此,也许我的代码无法正确处理async / Promise方法。

我用一个类似的代码做了一个Codepen。我无法写入最后的日志。解决Promise.all时写入此日志...

const getEntitiesData = async function () {
  await getEntities().then(function (response) {
    console.log("All entities: " + response.join(", "));
    const entitiesData = response.map(function (entity) {
      getEntityData(entity).then(function (response) {
        console.log("Entity data: " + JSON.stringify(response));
      });
    });
    return entitiesData;
  });
};

const getEntities = function () {
  return new Promise((resolve, reject) => {
    console.log("Getting all entities");
    setTimeout(resolve, 3000, [1, 2, 3, 4]);
  });
};
const getEntityData = function (id) {
  return new Promise((resolve, reject) => {
    console.log(`Getting entity ${id} data`);
    setTimeout(resolve, id*1000, { id: id, ref: "!"+id });
  });
};

const data = getEntitiesData();
Promise.all(data).then(function (response) {
  console.log("All Data get: " + response);
});

谢谢你的帮助。我想念什么?

评论