使用异步和递归的 JS 程序卡在主进程中
JS Program using Async & Recursion gets stuck in Main process
我正在尝试检索项目中的 Firebase 用户。我可以检索它们,但主程序 永远不会结束 。我使用 VS Code 或 运行 带有 npm 运行 的脚本进行调试,但它在两种情况下都卡住了。在 VS Code 中,堆栈上什么都没有留下……它永远不会停止
**用户函数(returns用户没有问题)
admin.auth().listUsers returns 具有属性 nextPageToken 和 [=22] 的 listUsersResult 对象=]用户数组
const BATCH_SIZE = 2;
const listAllUsers = async (nextPageToken = undefined) => {
let listUsersResult = await admin.auth().listUsers(BATCH_SIZE, nextPageToken);
if (listUsersResult.pageToken) {
return listUsersResult.users.concat(await listAllUsers(listUsersResult.pageToken));
} else {
return listUsersResult.users;
}
};
Main Routine(这是卡住的那个)
const uploadUsersMain = async () => {
try {
// if I comment out this call, then there is no problem
let firestoreUsers = await listAllUsers();
} catch(error) {
log.error(`Unable to retrieve users ${error}`)
}
finally {
// do stuff
}
}
uploadUsersMain();
阻止主程序结束的问题可能是什么?我应该寻找什么?谢谢
要关闭您的脚本,您应该使用
await admin.app().delete();
只要有句柄,Node.js 就会安静地留在 运行,句柄可以是任何东西 — 当然是网络套接字。
您也可以使用 process.exit()
,但最好正确关闭 SDK,而不是在可能未完成时突然退出。
我正在尝试检索项目中的 Firebase 用户。我可以检索它们,但主程序 永远不会结束 。我使用 VS Code 或 运行 带有 npm 运行 的脚本进行调试,但它在两种情况下都卡住了。在 VS Code 中,堆栈上什么都没有留下……它永远不会停止
**用户函数(returns用户没有问题)
admin.auth().listUsers returns 具有属性 nextPageToken 和 [=22] 的 listUsersResult 对象=]用户数组
const BATCH_SIZE = 2;
const listAllUsers = async (nextPageToken = undefined) => {
let listUsersResult = await admin.auth().listUsers(BATCH_SIZE, nextPageToken);
if (listUsersResult.pageToken) {
return listUsersResult.users.concat(await listAllUsers(listUsersResult.pageToken));
} else {
return listUsersResult.users;
}
};
Main Routine(这是卡住的那个)
const uploadUsersMain = async () => {
try {
// if I comment out this call, then there is no problem
let firestoreUsers = await listAllUsers();
} catch(error) {
log.error(`Unable to retrieve users ${error}`)
}
finally {
// do stuff
}
}
uploadUsersMain();
阻止主程序结束的问题可能是什么?我应该寻找什么?谢谢
要关闭您的脚本,您应该使用
await admin.app().delete();
只要有句柄,Node.js 就会安静地留在 运行,句柄可以是任何东西 — 当然是网络套接字。
您也可以使用 process.exit()
,但最好正确关闭 SDK,而不是在可能未完成时突然退出。