我正在尝试从httpscallable引发错误。我一直冒着错误直到最高层,我在控制台日志中看到了"throwing https error"
,但是由于某种原因,没有数据返回到客户端。
返回值为{data:null}
我的代码如下
exports.checkin = functions.https.onCall((data, context) => {
checkin.checkin(data, context)
.then(result => {console.log("returning",result); return result})
.catch(error => {console.log("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行是“ throw”行
答案 0 :(得分:0)
我怀疑在catch
回调中引发异常不会将相同的错误传播到catch
返回的承诺中。 documentation for callables指出:
要确保客户端获取有用的错误详细信息,请从 通过抛出(或返回被拒绝的Promise)来调用 函数实例。https.HttpsError
在您的情况下,您需要返回一个被HttpsError拒绝的承诺。我认为这意味着您需要返回HttpsError对象,而不是将其抛出catch回调之外:
exports.checkin = functions.https.onCall((data, context) => {
checkin.checkin(data, context)
.then(result => {console.log("returning",result); return result})
.catch(error => {
console.log("throwing https error");
return new functions.https.HttpsError("invalid-argument",
error.error_code ? error.error_code : error.code, error.message);
});
});