使用多个。然后于JavaScript校正评估顺序
我很痛苦,使在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));
}
回答如下:
你需要返回的承诺在第一then()
在else
条件。现在什么都不会返回所以跳转到下一个then
barCtrl.saveBar()
以往结算前
尝试
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校正评估顺序
我很痛苦,使在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));
}
回答如下:
你需要返回的承诺在第一then()
在else
条件。现在什么都不会返回所以跳转到下一个then
barCtrl.saveBar()
以往结算前
尝试
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));