google cloud函数httpsError无法正确抛出

时间:2018-07-26 23:09:37

标签: node.js firebase google-cloud-functions

我正在尝试从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”行

1 个答案:

答案 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);
     });
});