Promise和Node JS

时间:2018-04-16 20:48:31

标签: javascript node.js mongoose foreach promise

我需要你帮助一个简单的"问题,但承诺再次成为我的错误......

这不是我的代码的例子。

 // In a middleware, i have a mongoose request

Request
.find({ user: req.user.email })
.then(function (allDatasets) {
    allDatasets.forEach(function (oneDataset) {
        if (oneDataset.use_case == reqParams.use_case) {
            res.status(400).json({
                'msg': 'My response'
            })
        }
    })
})

// And my code continue...

我想如果条件为真,则节点返回此响应并停止代码!但是.. Node是异步的,当我的循环运行时,执行下面的代码。

我试着将下面的代码放在.then()中,但它不会等待循环结束继续执行代码......

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我认为你真正想要的是

Request.find({ user: req.user.email })
.then(function (allDatasets) {
    if (allDatasets.some(oneDataset => oneDataset.use_case == reqParams.use_case)) {
        res.status(400).json({
           'msg': 'My response'
        })
    } else {
        // And my code continue...
    }
});

答案 1 :(得分:0)

最好的方法是,您可以使用异步功能     const allDatasets = await Request.find({user:req.user.email});

allDatasets.forEach(function (oneDataset) {
    if (oneDataset.use_case == reqParams.use_case) {
        res.status(400).json({
            'msg': 'My response'
        })
    }
})
//you can continue your code here