Mit ES6 Promises, wie kann ich es in dem folgenden Szenario brechen?NodeJS brechen ein Versprechen
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);
});
}
Ich habe keine klare Dokumentation gefunden, die angibt, wie man das bricht. Anstatt angekettet then
s konnte ich es innerhalb der ersten then
haben, aber bei komplexeren Anfragen wäre es schön, in der Lage zu sein, sie angekettet zu haben.
Ich bin nicht sicher, ob dies in einer sauberen, kanonischen Art möglich ist. Siehe [diese Antwort] (https://stackoverflow.com/questions/29478751/how-to-cancel-an-emcascript6-vanilla-javascript-promise-chain) für etwas Ähnliches. Ich habe das in der Vergangenheit getan, indem ich entweder 'null' durch jedes 'then' zurückgeschickt habe, was erschreckend unordentlich ist; oder werfen, wenn ich in der 'catch'-Anweisung, die sich wiederum hacky fühlt, brechen und testen will. –