как ждать асин c EventEmitter в nodejs - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь выполнить функцию после того, как asyn c EventEmitter закончил, но я попробовал process.nexttick или setImediate, но они не работают, как я ожидал.

вот пример кода

const fs = require('fs');
const EventEmitter = require('events');

class WithTime extends EventEmitter {
    execute(asyncFunc, ...args) {
        console.time('execute');
        this.emit('begin');
        asyncFunc(...args, (err, data) => {
            if (err){
                return this.emit('error', err)
            }

            this.emit('data', data);
            console.timeEnd('execute');
            this.emit('end');
        })
    }
}

const withTime = new WithTime();

withTime.on('begin', () => console.log('About to execute'));
withTime.on('end', () => console.log('Done with execute'));

withTime.on('data', (data) => console.log('Length: ', data.length));
withTime.on('data', (data) => console.log('Characters: ', data.toString().length));

withTime.prependListener('data', (data) => console.log('Characters prepend: ', data.toString().length));


console.log('__filename1', __filename)
withTime.execute(fs.readFile, __filename);

process.nextTick(() => {
    console.log(1)
})

Я хочу, чтобы console.log (1) отображался после запуска функции withtime.execute, но он всегда отображается перед функцией withtime.execute, кто-нибудь, помогите мне, пожалуйста

...