使用ES6 Promise,如何在以下情況下將其分解?NodeJS違反Promise
addClient: function(request, response, next) {
var id = mongo.validateString(request.body.id);
mongo.Test.findOne({
id: id
})
.then(client => {
if (client) {
// want to break here
response.status(400).send({
error: 'client already exists'
});
} else {
return auth.hashPassword(mongo.validateString(request.body.secret));
}
})
.then(hashedSecret => {
// gets executed even if I don't return anything
return new mongo.Test({
name: mongo.validateString(request.body.name),
id: id,
secret: hashedSecret
}).save();
})
.then(doc => {
return response.status(201).send({
client: {
id: doc._id
}
});
})
.catch(err => {
return next(err);
});
}
我還沒有找到任何明確的文檔說明如何打破這一點。 而不是鏈接then
我可以在第一個then
內部,但在更復雜的請求,它將是很高興能夠讓他們鏈接。
我不確定這是乾淨的,規範的方式可能。看到[這個答案](https://stackoverflow.com/questions/29478751/how-to-cancel-an-emcascript6-vanilla-javascript-promise-chain)爲類似的東西。過去,我通過每個'then'返回'null'來實現這一點,這是令人恐怖的混亂;或者當我想在'catch'語句中打破並測試這個語句時拋出,這又一次讓人覺得很尷尬。 –