Я пытаюсь выдать ошибку из httpscallable. У меня ошибка всплывает до самого верхнего уровня, я вижу "throwing https error" в журнале консоли, но по какой-то причине данные не возвращаются клиенту.
Возврат - {data:null}
Мой код выглядит следующим образом
exports.checkin = functions.https.onCall((data, context) => {
checkin.checkin(data, context)
.then(result => {console.info("returning",result); return result})
.catch(error => {console.info("throwing https error");
throw new functions.https.HttpsError("invalid-argument", (error.error_code) ? error.error_code : error.code, error.message);});
});
В журнале вижу:
- throwing https error checkin
- Unhandled rejection checkin
- Error: no_creditcard_for_charge
at HttpsError (/user_code/node_modules/firebase-functions/lib/providers/https.js:74:9)
at checkin.checkin.then.catch.error (/user_code/index.js:65:11)
строка 65 - это линия "выброса"
@DougStevenson - обновил вопрос с помощью операторов журнала





Я подозреваю, что выброс исключения внутри обратного вызова catch не распространяет ту же ошибку на обещание, возвращаемое catch. В документация для звонков говорится:
To ensure the client gets useful error details, return errors from a callable by throwing (or returning a Promise rejected with) an instance of functions.https.HttpsError
В вашем случае вам нужно вернуть обещание, отклоненное с помощью HttpsError. Я думаю, это означает, что вам нужно вернуть объект HttpsError вместо того, чтобы выбросить его из обратного вызова catch:
exports.checkin = functions.https.onCall((data, context) => {
checkin.checkin(data, context)
.then(result => {console.info("returning",result); return result})
.catch(error => {
console.info("throwing https error");
return new functions.https.HttpsError("invalid-argument",
error.error_code ? error.error_code : error.code, error.message);
});
});
Что в логе в консоли?