返回异步/等待同步节点

时间:2018-07-06 14:31:32

标签: node.js

在此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()

})

1 个答案:

答案 0 :(得分:2)

您不是await 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