我有一个云函数,可以监听Firebase Database
中的更改,并使用返回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)
});
}
此代码按预期工作,但在“日志”窗口中显示错误:
错误:函数返回未定义,预期的Promise或值
如何摆脱那个错误?
答案 0 :(得分:2)
最后定义的两个函数确实返回undefined
,因为它们不是return
任何东西。这可以在Ruby中使用,函数体中的最后一个解释行是return
ed。
所以在这些函数内部的函数开始之前添加return
,你正在使用Promise链,它将返回Promise,因为它们的执行将完成。
所以在你的代码中会有这样的:
return admin.auth()...
并且
return admin.database()...