【发布时间】:2018-06-13 03:43:13
【问题描述】:
我有一个带有一些 id 的对象,我需要通过在不同的端点获取来替换它们的关联对象。
{
user: 123456
items: [
1234,
4321,
]
}
我想获取它,其中 a 是 userId 的端点 GET /user 和每个项目 id 的 GET /item 。我希望返回一个完整的对象,例如:
{
user: { ... }
items: [
{ ... }
{ ... }
]
}
我所有的用户和项目功能都工作并且正在使用异步获取,所以我想我想要一些类似的东西:
const fillIn = async data => {
return Promise.all(
data.map(async obj => {
const userId = obj.userId;
const itemIds = obj.items
return Promise.all([
getUser(creatorId),
Promise.all(itemIds.map(item => getItem(item)))
]);
})
);
};
我的问题是 promise.all 返回什么,什么时候返回?我不断得到未解决的函数,但我认为它的全部意义在于解决所有的承诺!?
【问题讨论】:
-
请显示完整代码,包括
data和getUser/getItem -
Promise.all返回一个承诺。您可以从中调用.then()和其他promise 方法 -
如果你试图使异步代码同步(我认为你是),这是不可能的。你必须要么
await它要么使用.then()。 -
promise.all 只是一个promise,当所有promise 都从您输入的promise 数组中解决时,它就会被解决。将其视为包装其他 Promise 的 Promise,同时使用 async await 语法意味着您必须在所有异步调用上使用 await。就像其他人在这里说的那样
-
我错过了“它什么时候返回?”的问题。答案是立竿见影。
Promise.all()resolves 在您传递给Promise.all()的数组中列出的每个 promise 解析后立即返回的promise,并在any后立即拒绝> 在拒绝中传递的承诺。您可以使用Promise.all([...]).then(responses => {/* success/resolved */ }, err => { /* error/rejected */})处理这些问题
标签: javascript promise