[英]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),
])
然后我通過結果數組 map 並返回一個對象數組,如下所示:
//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()
旨在返回一組已解決的承諾。 我可能做錯了什么? 我該如何解決這個問題? 任何幫助表示贊賞。 非常感謝。
我不知道這里發生了什么,據我了解 Promise.all() 旨在返回一系列已解決的承諾。
沒有。 Promise.all()
返回一個 promise ,當傳遞給它的所有承諾都已解決時,它會解決。
第一次使用它時(在代碼塊 1 中),您await
返回值。 result
填充了傳遞給Promise.all
的所有承諾的解析值。
另一次你有一個名為result
的變量:
const result = data.map(async (item) => {
您使用通過async
函數映射一些數據的結果來填充它。
async
函數總是返回 Promises,所以你會得到一個存儲在result
中的 Promise 數組。
在async
function 中,您可以執行以下操作:
return Promise.all([ User.create({ name: item.name, }), ])
在這里使用Promise.all
是沒有意義的。 首先,您只需將一個 promise 傳遞給它。
你需要
User.create
返回的 PromisePromise.all
獲得單個 promise ,當它們都准備好時解析這樣的:
const promises = data.map( item => User.create({ name: item.name }) );
const results = await Promise.all(promises);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.