ES6プロミスを使用すると、次のような状況でどのように壊れますか?NodeJSプロミスを破る
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)を参照してください。私は過去に、それぞれの 'それから'ヌルを返すことでこれをしました。それは恐ろしいほど面倒です。私が「catch」ステートメントでそれを壊してテストしたいときに投げたりします。これはやはりハッキリと感じます。 –