我正在努力让这段代码在 JavaScript 中同步。
注释(1,2 和 3)说明了按顺序发生的情况,现在它可以在创建新栏之前保存所有者。
我需要 findOne,可能需要 saveBar,然后是 saveOwner。
function setMyBar(req, res, next) {
const owner = req.queryOwner;
Bar.findOne({
placeId: req.body.placeId
})
.then((bar) => {
if(bar){
owner.bar = bar; //1
return owner;
}else{
barCtrl.saveBar(req.body.name, req.body.placeId, req.body.longitude, req.body.latitude)
.then((savedBar) => {
owner.bar = savedBar; //3
return owner;
})
.catch(e => {return Promise.reject(err) })
}
}).then(() => {
owner.save()
.then(savedOwner => res.json(savedOwner)) //2
.catch(e => next(e));
})
.catch(e => next(e));
}
最佳答案
您需要在 else
条件的第一个 then()
中返回 promise 。现在没有返回任何内容,因此它会在 barCtrl.saveBar()
解析之前跳转到下一个 then
尝试
Bar.findOne({
placeId: req.body.placeId
})
.then((bar) => {
if(bar){
owner.bar = bar; //1
return owner;
}else{
// return this promise
return barCtrl.saveBar(req.body.name, req.body.placeId, req.body.longitude, req.body.latitude)
.then((savedBar) => {
owner.bar = savedBar; //3
return owner;
})
.catch(e => {return Promise.reject(err) })
}
}).then(() => {
owner.save()
.then(savedOwner => res.json(savedOwner)) //2
.catch(e => next(e));
})
.catch(e => next(e));
关于javascript - 使用多个 .then 更正 JavaScript 的求值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50573252/