第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法弄清楚如何等待 Promise

無法弄清楚如何等待 Promise

瀟湘沐 2021-09-17 10:18:01
我有一個包含用戶 ID 的數(shù)組,我需要找出每個 ID 的名稱并將它們返回到一個數(shù)組中。我可以從數(shù)據(jù)庫中獲取用戶名,使用 knex 并將它們推送到一個數(shù)組中,但是當(dāng)我嘗試發(fā)送數(shù)據(jù)時,它始終是一個空數(shù)組。我對 Promises 不太擅長,所以不知道如何應(yīng)用到我的項目中。const userId = [10,11,12,13]let users = []userId.map(id => {    db.select('name').from('users').where('user_id', id)    .then(user => {        users.push(user)    })})res.json(users)我希望響應(yīng)等待循環(huán)完成并發(fā)送用戶數(shù)組。
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

首先,您需要在運行之前等待所有承諾完成 res.json(...)


其次,您不應(yīng)該在承諾解析后改變外部變量(承諾解析的順序?qū)⒏淖兡妮敵?,這并不好。


像這樣的東西應(yīng)該可以正常工作


const userId = [10,11,12,13]


// map userId array to promise array

// Promise.all aggregates a promise array into one big promise that resolves when all promises resolve (and preserves array order)

Promise.all(

  userId.map(id =>

    db

      .select("name")

      .from("users")

      .where("user_id", id)

  )

)

  .then(users => res.json(users))

  .catch(e => console.error("Error::", e));


/*handle error in the catch block*/


/* visual example of Promise.all.then block

Promise.all([           users = [

   getUser(10),    ->     {userId: 10, ....}

   getUser(11),    ->     {userId: 11, ....}

   getUser(12)     ->     {userId: 12, ....}

])                      ]


*/


查看完整回答
反對 回復(fù) 2021-09-17
?
茅侃侃

TA貢獻1842條經(jīng)驗 獲得超21個贊

作為替代答案,以下是您如何針對此特定查詢對數(shù)據(jù)庫進行 1 次旅行,這意味著您無需等待多個 Promise 并減少數(shù)據(jù)庫的負(fù)載


knex.raw(

  'select name from users where user_id in (' + userId.map(_ => '?').join(',') + ')', 

  [...userId]

);


查看完整回答
反對 回復(fù) 2021-09-17
  • 3 回答
  • 0 關(guān)注
  • 427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號