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