首页 > 解决方案 > 返回异步/等待同步节点

问题描述

在这个 err.length 代码中总是返回 []。我哪里错了?

err.length 不等待地图结果

router.post('/add', authSigs, async (req, res) => {
  const nds = req.body.nds
  const split = nds.split('\n')
  const err = []

  await split.map(async item => {
    let sub = item.substr(0, 7)
    const checkModel = await modelSerial.findOne({
      'modelNds': sub
    })

    if (!checkModel) err.push(item)
  })

  if (err.length > 0) return res.status(400).send({error: 'Invalid'})
  return res.status(200).send()

})

标签: node.js

解决方案


你没有await在 a 上Promise,你正在这样做await [Promise, Promise],你await实际上并没有等待所有的承诺解决,你需要使用Promise.all,它需要一系列承诺。

Promise.all(iterable) 方法返回一个 Promise,当可迭代参数中的所有承诺都已解决或可迭代参数不包含任何承诺时,该 Promise 将解决。它以拒绝的第一个承诺的原因拒绝。

const promises =  split.map(async item => {
  let sub = item.substr(0, 7)
  const checkModel = await modelSerial.findOne({
    'modelNds': sub
  })

  if (!checkModel) err.push(item)
});

await Promise.all(promises);
// Now all promises have been resolved
// err will contain items if there were any errors

推荐阅读