Firebase确保完成异步功能

时间:2018-01-23 15:51:00

标签: firebase firebase-realtime-database google-cloud-functions

如何确保我的.remove来电已完成?我是否正确使用以下代码?最近我发现这个功能根本没有完成的情况。你能解释异步电话吗?感谢。

exports.UserDelete = functions.auth.user().onDelete(event => {
    var uid = event.data.uid;
    admin.database().ref("notes/" + uid).remove();
    admin.database().ref("users/" + uid).remove();
    admin.database().ref("providers/" + uid).remove();
    return null;
});

2 个答案:

答案 0 :(得分:4)

当所有异步工作完成时,您必须从函数返回一个已解决的promise。了解异步编程的工作原理是critical for using Cloud Functions。对remove()的每次调用都会返回一个promise,因此您需要将它们全部收集到一个数组中并将它们传递给Promise.all(),以获得在完成所有工作后已解决的另一个承诺。

exports.UserDelete = functions.auth.user().onDelete(event => {
    const uid = event.data.uid;
    const p1 = admin.database().ref("notes/" + uid).remove();
    const p2 = admin.database().ref("users/" + uid).remove();
    const p3 = admin.database().ref("providers/" + uid).remove();
    return Promise.all([p1, p2, p3]);
});

答案 1 :(得分:0)

当你在firebase-function中使用Promise个任务时,你应该返回async

结帐this

var uid = event.data.uid;

return admin.database().ref("notes/" + uid).remove()
.then(() => admin.database().ref("users/" + uid).remove())
.then(() => admin.database().ref("providers/" + uid).remove())