【发布时间】:2016-04-25 11:18:57
【问题描述】:
我有以下代码。但这看起来类似于回调地狱。我如何将这段代码重新组织成更合适的承诺方式
FacilityBooking.forge({
"booking_id": req.params.id
})
.fetch({
require: true
})
.then(function(collection) {
if(0) { //@todo check if admin
throw new NotAuthorised(CFG_MESSAGES.error[403]);
} else {
Bookshelf.transaction(function(t) {
collection
.save({
"is_valid": 0,
"updated_by": req.user.id
}, {transacting: t})
.tap(function(model) {
new FacilityBooking(model.toJSON())
.save({
"is_valid": 1,
"reason_for_reject": req.body.disapprovereason || '' ,
"status": approval_status[req.body.moderation_action]
}, {transacting: t})
.then(function(collection) {
res.json({
status: true,
message: CFG_MESSAGES.facility_booking.moderate.success
});
})
.catch(function(err) {
res.json({
status: false,
message: CFG_MESSAGES.facility_booking.moderate.error
});
});
});
});
}
})
.catch(function(err) {
ErrorHandler.handleError(res, err);
});
【问题讨论】:
-
为什么要内联所有内容?
-
看看 enrmarc 的回答。
-
为什么使用
tap而不是then? -
难道
transaction不希望您回调到return是一个承诺吗?它本身会返回一个承诺吗? -
Removing nested promises 的可能重复项
标签: javascript promise bluebird bookshelf.js