Javascript 如果Firebase云函数有两个或多个方法返回承诺,那么该返回什么?
我有一个云函数,它监听Javascript 如果Firebase云函数有两个或多个方法返回承诺,那么该返回什么?,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我有一个云函数,它监听Firebase数据库中的更改,并用一个返回promise的函数进行响应 exports.clean_up_anonymous_users = functions.database.ref('path/to/ref') .onWrite(event => { // Make Sure it's not a delete event if (!event.data.val()) { return 0; } cons
Firebase数据库中的更改
,并用一个返回promise
的函数进行响应
exports.clean_up_anonymous_users =
functions.database.ref('path/to/ref')
.onWrite(event => {
// Make Sure it's not a delete event
if (!event.data.val()) {
return 0;
}
const cleanUp = event.data.val();
// Normal Boolean check of my value
if (cleanUp === true) {
// Deletes Anonymous Users (returns a promise)
listAllUsers();
// Removes the value from the Database (returns a promise)
return removeFromQueue("path/to/ref");
}
// If cleanUp === false
return 0;
});
// ===============================================
// I think that's enough but if you wish, read on!
// ===============================================
function listAllUsers(nextPageToken) {
// List batch of users, 1000 at a time.
admin.auth().listUsers(1000, nextPageToken)
.then(function(listUsersResult) {
listUsersResult.users.forEach(function(userRecord) {
var userInfo = userRecord.providerData;
if (userInfo.length === 0) {
var uid = userRecord.uid;
admin.auth().deleteUser(uid)
.then(function() {
console.log("Successfully deleted user:", uid);
})
.catch(function(error) {
console.log("Error deleting user:", error);
});
}
});
if (listUsersResult.pageToken) {
// List next batch of users.
listAllUsers(listUsersResult.pageToken);
}
})
.catch(function(error) {
console.log("Error listing users:", error);
});
}
function removeFromQueue(path) {
admin.database().ref(path).remove()
.then(function() {
console.log("Remove succeeded.")
})
.catch(function(error) {
console.log("Remove failed: " + error.message)
});
}
此代码按预期工作,但在日志窗口中显示错误:
错误:函数返回未定义的预期承诺或值
如何消除该错误?最后定义的两个函数确实返回
未定义的,因为它们没有返回任何内容。这将在Ruby中起作用,函数体中最后解释的行是return
ed
因此,在这些函数中的主体开始之前添加return
,因为在它们内部,您正在使用承诺链,该承诺链将在它们的执行完成时返回承诺
因此,在您的代码中会出现以下内容:
return admin.auth()...
及
尝试在listAllUsers函数的正文中的第一行之前添加return 1+谢谢,就是这样
return admin.database()...