Программа JS с использованием Async & Recursion застревает в главном процессе - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь получить пользователей Firebase в проекте.Я могу получить их, но основная программа никогда не заканчивается .Я отлаживаю с помощью VS Code или запускаю скрипт с помощью npm, и он застревает в обоих направлениях.В VS Code ничего не остается в стеке ... он просто никогда не останавливается

** Функция Users (возвращает пользователей без проблем)

admin.auth (). ListUsers возвращает listUsersResult объект со свойствами nextPageToken и пользователи массив

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 Ответ

1 голос
/ 24 мая 2019

Чтобы завершить работу вашего скрипта, вы должны использовать

await admin.app().delete();

Node.js будет спокойно работать, пока есть дескрипторы, которые действительно могут быть чем угодно - сетевой сокет, безусловно.

Вы также можете использовать process.exit(), но хорошей практикой является правильное завершение работы SDK вместо внезапного выхода, когда он может быть не завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...