У меня есть следующий код с некоторыми прикованными обещаниями. Я пытаюсь бросить ошибку во внутреннем then
, что я ожидал, чтобы быть пойманным внешним catch
, но это не текущее поведение:Обещания - захват внутреннего броска
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);
Как я могу сделать внешний улов быть мишенью throw
заявления ?
EDIT Обновленный код, предложенный Vohuman.
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);
Как я могу сейчас разрешить пользователю в первом еще заявление без его поймали в следующем then
?
Идея состоит в том, чтобы отправить подтверждение по электронной почте, если адрес электронной почты не существует в базе данных ИЛИ если адрес электронной почты совпадает с запросом учетной записи (повторно отправить подтверждение по электронной почте). Если письмо уже существует, я хотел бы прекратить выполнение.
Вы должны «вернуть» обещание 'getByEmail'. – undefined
@ Vohuman: Благодарю вас за помощь. И как я должен иметь дело с инструкцией else, которая возвращает действительный ответ? Если вам нужна дополнительная информация, я могу работать на скрипке. –
. Вот скрипка js: https://jsfiddle.net/q5df3qmg/ –