【发布时间】:2020-09-03 12:20:54
【问题描述】:
我正在编写一个连接到 API 的节点代码以获取一些数据。我使用 JS Promise 调用 API 并获取解析部分的数据。现在我需要调用不同的端点来获取完整的数据。所以我最终选择了 Promise.all。但我不能让它工作。我读到异步函数也返回一个 Promise。所以也许我的代码没有正确处理 async/Promise 方法。
我用我拥有的类似代码做了一个代码笔。我无法获得要写入的最后一个日志。这个日志是在 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);
});
感谢您的帮助。我错过了什么?
【问题讨论】:
-
您是否尝试在单个 Promise 上使用 Promise.all? getEntitiesData() 没有返回任何东西,你需要在 await 上返回
-
您需要在此处在您的问题中发布minimal reproducible example,并在任何第三方网站上发布not a link。
-
请将与您的问题相关的代码放在您的问题中,粘贴为文本并适当格式化。这使您的问题可搜索,它对移动用户更有效,将来不会改变,因为外部链接有消失或改变的习惯,这是这里的规则。
-
这里有很多问题。第一个问题是
response.map()回调需要返回它的承诺,而该回调中的.then()处理程序需要返回它的值。 -
.map()根据您从.map()回调返回的内容返回一个新数组。在 cmets 中阅读多行代码有点困难,但我认为您已经进行了我在那里建议的两个更改。
标签: javascript node.js promise async-await axios