2 回答

TA貢獻1852條經驗 獲得超1個贊
這是因為對于您通過執行async/await正確返回的版本listUsersResult
listUsersResult = await admin.auth().listUsers()
return listUsersResult
但是,對于這個then版本,你不需要。您應該返回整個承諾鏈,如下所示:
exports.listAllUsers = functions.https.onCall(() => {
return admin.auth().listUsers() // !!! Note the return here !!!
.then((listUsersResult) => {
return listUsersResult
})
.catch((error) => {
console.log('Error listing users:', error)
return null
})
})

TA貢獻1966條經驗 獲得超4個贊
最后我決定async/await為我的云函數編寫一個版本。第then一個代碼片段中的版本需要的不僅僅是將其添加return到整個 promises 鏈中(它最初抱怨是因為遞歸性,也許,要求我添加async到包裝函數listAllUsers中......我希望該then版本只是從firebase 文檔,但它想要更多)。
我想分享這個自制的(但最初測試過的)版本作為帶有 async/await 的示例,沒有遞歸性來列出用戶admin.auth().listUsers(maxResults?, pageToken?):
// get list of users
exports.listAllUsers = functions.https.onCall(async () => {
const usersList = []
try {
let listUsersResult
let nextPageToken
do {
if (listUsersResult) {
nextPageToken = listUsersResult.pageToken
}
// eslint-disable-next-line no-await-in-loop
listUsersResult = await admin.auth().listUsers(1000, nextPageToken)
listUsersResult.users.forEach((userRecord) => {
usersList.push(userRecord.uid)
})
} while (listUsersResult.pageToken)
return usersList
} catch (error) {
console.log('Error listing users:', error)
return null
}
})
添加回答
舉報