解析 Javascript 中的承诺数组
Resolving Array of Promises in Javascript
我目前正在做一个小项目,遇到了这个问题。
这是我正在做的事情的一些背景信息。首先,我像这样同时调用 API 和 Axios
:
const [...result] = await Promise.all([
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
])
然后我映射结果数组并取回一组对象,如下所示:
//data array
const data = [{name: 'john'}, {name: 'jane'}, {name: 'doe}]
基于上面列出的数据数组,我像这样在我的 MongoDB 集合中创建新用户。
const result = data.map(async (item) => {
return Promise.all([
User.create({ name: item.name, }),
])
})
现在,问题来了 - 当我执行 console.log(result)
时,我得到了一系列未解决的承诺,例如:
result [
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
我不知道这里发生了什么。根据我的理解,Promise.all()
意味着 return 一系列已解决的承诺。我做错了什么?我该如何解决这个问题?任何帮助表示赞赏。非常感谢。
I don't know what's happening here, from my understanding Promise.all() is meant to return an array of resolved promises.
没有。 Promise.all()
return 当传递给它的所有承诺都已解决时,承诺就会解决。
第一次 使用它时(在代码块 1 中)您 await
return 值。 result
填充了传递给 Promise.all
.
的所有承诺的已解决值
另一次你有一个名为 result
的变量:
const result = data.map(async (item) => {
您使用通过 async
函数映射某些数据的结果填充它。
async
始终运行 return Promise,因此您将获得存储在 result
.
中的一组 Promise
在 async
函数中,您可以这样做:
return Promise.all([
User.create({ name: item.name, }),
])
这里使用Promise.all
是没有意义的。你一开始只给它传递一个承诺。
你需要
- 从对
User.create
的每次调用中收集 return 的承诺
- 使用
Promise.all
获得一个承诺,当他们都准备好时解决
- 等待承诺解决
这样的:
const promises = data.map( item => User.create({ name: item.name }) );
const results = await Promise.all(promises);
我目前正在做一个小项目,遇到了这个问题。
这是我正在做的事情的一些背景信息。首先,我像这样同时调用 API 和 Axios
:
const [...result] = await Promise.all([
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
axios.post('api-url', data, headers),
])
然后我映射结果数组并取回一组对象,如下所示:
//data array
const data = [{name: 'john'}, {name: 'jane'}, {name: 'doe}]
基于上面列出的数据数组,我像这样在我的 MongoDB 集合中创建新用户。
const result = data.map(async (item) => {
return Promise.all([
User.create({ name: item.name, }),
])
})
现在,问题来了 - 当我执行 console.log(result)
时,我得到了一系列未解决的承诺,例如:
result [
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
我不知道这里发生了什么。根据我的理解,Promise.all()
意味着 return 一系列已解决的承诺。我做错了什么?我该如何解决这个问题?任何帮助表示赞赏。非常感谢。
I don't know what's happening here, from my understanding Promise.all() is meant to return an array of resolved promises.
没有。 Promise.all()
return 当传递给它的所有承诺都已解决时,承诺就会解决。
第一次 使用它时(在代码块 1 中)您 await
return 值。 result
填充了传递给 Promise.all
.
另一次你有一个名为 result
的变量:
const result = data.map(async (item) => {
您使用通过 async
函数映射某些数据的结果填充它。
async
始终运行 return Promise,因此您将获得存储在 result
.
在 async
函数中,您可以这样做:
return Promise.all([ User.create({ name: item.name, }), ])
这里使用Promise.all
是没有意义的。你一开始只给它传递一个承诺。
你需要
- 从对
User.create
的每次调用中收集 return 的承诺
- 使用
Promise.all
获得一个承诺,当他们都准备好时解决 - 等待承诺解决
这样的:
const promises = data.map( item => User.create({ name: item.name }) );
const results = await Promise.all(promises);