В настоящее время, если в обратном вызове asyncFunction1()
s обнаружена ошибка, приложение корректно сгенерирует исключение «Проблема A». Однако это проходит через цепочку обещаний, и приложение в конечном итоге увидит «Проблема B», что означает, что приложение показывает неправильную ошибку пользователю.
Мне фактически нужно прервать выполнение и разорвать цепочку, выдав соответствующую ошибку. Как я могу это сделать?
Информация о классе HttpsError находится здесь: https://firebase.google.com/docs/reference/functions/functions.https.HttpsError
В нем прямо упоминается:
Убедитесь, что вы выбросили это исключение на верхний уровень вашей функции.
а не из-за обратного вызова, так как это не обязательно завершится
функция с этим исключением.
Кажется, я попал в эту ловушку, но не знаю, как ее обойти. Если бы кто-то мог помочь мне реорганизовать код, чтобы я мог эффективно отлавливать и обрабатывать эти ошибки должным образом, это было бы очень полезно.
exports.charge = functions.https.onCall(data => {
asyncFunction1()
.then(() => {
asyncFunction2();
})
.catch((err) => {
throw new functions.https.HttpsError(
'not-found',
'Problem A'
);
})
.then(() => {
asyncFunction3();
})
.catch((err) => {
throw new functions.https.HttpsError(
'not-found',
'Problem B'
);
})
});