Рекурсия, связанная с событием на Node.js - PullRequest
3 голосов
/ 20 июня 2020

Допустим, у нас есть функция с именем doSomething();

Внутри этой функции я объявляю объект с именем dispatcher.

dispatcher имеет функцию, которая работает асинхронно и пропускает событие 'end' по завершении.

Итак, код выглядит так:

const doSomething = () => {
    const dispatcher = someObject.function.thatReturnsDispatcher();
}

Итак, эта doSomething() функция не совсем бесполезна и на самом деле делает гораздо больше, чем просто присваивает единственная переменная, и я хочу, чтобы этот dispatcher выполнял те же действия, что и doSomething() всякий раз, когда его асинхронная функция заканчивается. Поэтому я делаю что-то вроде этого:

const doSomething = async () => {
    //important stuff above

    const dispatcher = someObject.function.thatReturnsDispatcher();
    dispatcher.on('end' , () => {
        doSomething();
    });

    //important stuff below
}

, и это работает!

Но мне интересно одно:

Когда он вызывается, работает ли функция doSomething() рекурсивно или функция завершается, и узел сохраняет функцию discpatcher.on('end') и вызывает ее всякий раз, когда событие end пропускается?

1 Ответ

3 голосов
/ 20 июня 2020

Фактически и то и другое.

Нет сомнений в том, что doSomething вызывается рекурсивно (следующий вызов doSomething происходит из текущего doSomething вызова).

И, в зависимости от того, что вы делаете в закомментированном материале, doSomething, вероятно, завершится до того, как будет вызван обратный вызов диспетчера, dispatcher.on регистрирует обратный вызов, который будет вызываться, когда что-то закончится, независимо от того, закончится doSomething или нет.

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