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
}
})
添加回答
举报