在此触发的云函数中返回承诺的正确方法是什么

时间:2021-02-14 02:23:23

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

我知道对于触发函数,我必须始终返回一个承诺。看下面的例子:

//Example
exports.onAuthUserDelete = functions.auth.user().onDelete(async (user) => {
    let userId = user.uid;

    try {
        await firestore.collection('Users').doc(userId).delete();
        return Promise.resolve();
    } catch (error) {
        logger.error(error);
        return Promise.reject(error);
    }
});

我的问题是:

  1. 需要 return Promise.resolve() 还是我可以只做 return firestore.collection('Users').doc(userId).delete()?如果我选择使用后者,如果命令失败会发生什么?它还会触发catch()吗?
  2. 使用以下模板启动每个函数以确保始终返回 promise 是否更好?
//Is it better to start with this boilerplate
exports.onAuthUserDelete = functions.auth.user().onDelete(async (user) => {
    return new Promise((resolve, reject) => {
        //My code goes here...
    });
}

1 个答案:

答案 0 :(得分:0)

Firestore 的 delete 操作已经返回了一个 promise,因此无需创建您自己的。据我所知,第一个示例与以下示例相同:

exports.onAuthUserDelete = functions.auth.user().onDelete((user) => {
    return firestore.collection('Users').doc(user.uid).delete();
});

鉴于此,我强烈建议使用上述较短的版本。