Ich habe den folgenden Code, mit einigen verketteten Versprechen. Ich versuche, einen Fehler in einem inneren then
zu werfen, die ich durch die äußere catch
gefangen werden erwartet, aber es ist nicht das aktuelle Verhalten:Versprechen - Fang inneren Wurf
User.getById(userId).then((user: any) => {
if (user.email != email) {
User.getByEmail(email).then((user: any) => {
throw new OperationError("exists"));
}).catch(StorageError, (err: any) => {
user.email = email;
return user.save();
});
} else {
return user.save();
}
}).then((user: any) => {
return {
ok: true,
user: user
};
}).catch(OperationError, (error: any) => {
return {
ok: false,
message: error.message
};
}).asCallback(reply);
Wie kann ich die äußere Fang durch die throw
Aussage werden gezielt machen ?
BEARBEITEN Aktualisierter Code wie Vohuman vorgeschlagen.
User.getById(userId).then((user: any) => {
finalUser = user;
if (user.email != email) {
return User.getByEmail(email);
}
else {
//I would like for this response [1] to be used in [2]
return Promise.resolve(user);
}
}).then((user: any) => {
throw new OperationError("Email already exists");
}).catch(StorageError, (error: any) => {
finalUser.email = email;
return finalUser.save();
}).then((user: any) => {
//[2] here is where I would like the else statement to come
sendEmail(user.email, subject, content);
return { ok: true, user: user };
}).catch(OperationError, (error: any) => {
return { ok: false, message: error.message };
}).asCallback(reply);
Wie kann ich den Benutzer in der ersten else-Anweisung löse jetzt, ohne es in dem folgenden then
gefangen zu haben?
Die Idee besteht darin, eine E-Mail-Bestätigung zu senden, wenn die E-Mail nicht in der Datenbank vorhanden ist ODER wenn die E-Mail mit dem anfordernden Konto übereinstimmt (E-Mail-Bestätigung erneut senden). Wenn die E-Mail bereits existiert, möchte ich die Ausführung abbrechen.
Sie sollten das Versprechen "getByEmail" zurückgeben. – undefined
@Vohuman: Danke für Ihre Hilfe. Und wie sollte ich mit der else-Anweisung umgehen, die eine gültige Antwort zurückgibt? Wenn Sie mehr Informationen benötigen, kann ich an einer Geige arbeiten –
Hier ist eine js Geige: https://jsfiddle.net/q5df3qmg/ –