簡體   English   中英

解析 Javascript 中的 Promise 數組

[英]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 傳遞給它。

你需要

  1. 收集每次調用User.create返回的 Promise
  2. 使用Promise.all獲得單個 promise ,當它們都准備好時解析
  3. 等待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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM