使用Async&Recursion的JS程序陷入主流程

时间:2019-05-24 01:16:33

标签: javascript recursion async-await firebase-admin

我正在尝试检索项目中的Firebase用户。我可以检索它们,但是主程序永无止境。我使用VS Code进行调试,或者使用npm run运行脚本,但是这两种方法都会卡住。在VS Code中,堆栈上没有任何东西...它永远不会停止

**用户功能(返回用户没有问题)

admin.auth()。listUsers返回具有属性 nextPageToken users 数组

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;
  }
};

主例程(这是被卡住的例程)

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();

阻止主程序结束的问题可能是什么?我应该找什么?谢谢

1 个答案:

答案 0 :(得分:1)

要关闭脚本,您应该使用

await admin.app().delete();

只要有句柄,Node.js就会安静地保持运行,这实际上可以是任何东西-当然是网络套接字。

您也可以使用process.exit(),但是正确关闭SDK是一个好习惯,而不是在未完成时突然退出。