Ich bin neu in der Welt der Versprechen und ich bin mir nicht sicher, ob ich vollständig verstehe, wie man sie in einigen Fällen verwendet.Stoppen Sie die Ausführung eines Versprechens Sequelize in Express.js
Sequelize kürzlich hinzugefügt Unterstützung verspricht, die wirklich macht meinen Code lesbarer. Ein typisches Szenario besteht darin, Fehler in unendlichen Rückrufen mehrmals zu vermeiden. Der Code unten gibt immer 204
zurück, während ich möchte, dass 404
zurückgegeben wird, wenn das Foto nicht gefunden werden kann.
Gibt es eine Möglichkeit, Sequelize anzuweisen, die Ausführung der Versprechenskette nach dem Senden von 404 "anzuhalten"? Beachten Sie, dass res.send
asynchron ist, sodass die Ausführung nicht gestoppt wird.
// Find the original photo
Photo.find(req.params.id).then(function (photo) {
if (photo) {
// Delete the photo in the db
return photo.destroy();
} else {
res.send(404);
// HOW TO STOP PROMISE CHAIN HERE?
}
}).then(function() {
res.send(204);
}).catch(function (error) {
res.send(500, error);
});
Natürlich ist dieses Beispiel trivial und könnte leicht mit Rückrufen geschrieben werden. Aber in den meisten Fällen kann der Code viel länger werden.
Was Sie brauchen, ist ein Weg, um das Versprechen zu markieren, wie an dieser Stelle aufgelöst . Ich bin nicht vertraut mit Sequelize, aber ich nehme an, dass es einen Weg geben muss, das zu tun. –
Danke Edwin. Das einzige, was ich weiß ist, dass Sequelize Bluebird verwendet. Ich sehe jedoch nichts in ihrer API, das es mir erlaubt, eine Versprechungskette zu stoppen. – Pedro
Wenn Sie innerhalb Ihres 'then' Handlers" werfen ", wird die Kette zurückgewiesen. Es gibt auch ein (offenes Problem) [https://github.com/sequelize/sequelize/issues/272], um den Suchaufruf automatisch abzulehnen, wenn kein Ergebnis gefunden wird. Sie können Ihre Unterstützung dort äußern, wenn Sie die Funktion benötigen –