【发布时间】:2018-08-08 05:33:07
【问题描述】:
我创建了这个“简单模式”,适用于组合 Promise 和 EventEmitter(与 nodejs)。
但是:我想知道是否有更好的进球方式?
const { EventEmitter } = require('events');
const fs = require('fs');
function doSomething(parameters) {
const emitter = new EventEmitter();
const promise = new Promise((resolve, reject) => {
// DO DIRTY JOB
fs.readdir(parameters.directory, (err, files) => {
if (err) {
reject(err);
return;
}
files.forEach(file => emitter.emit('update-event', file));
resolve(`I'm done: ${parameters.param} world`);
});
});
return { promise, emitter };
}
const work = doSomething({ param: 'hello', directory: './' });
work.emitter.on('update-event', data => console.log(`Update ${data}`));
work.promise.then(console.log).catch(console.error);
我在想:
doSomething(...).on(...).then(...)
但我不知道该怎么做。
【问题讨论】:
-
FYI.. Node V10.0.0 已经具有返回承诺的
fsPromises.readdir()功能。 -
您正在一次触发所有事件 - 您不需要
EventEmitter。用一个数组来兑现你的诺言。 -
@Bergi 我认为他只是展示了一个简单的示例,而他的实际代码更复杂,它需要进度事件以及完成后解决承诺。我也想做类似
doSomething(...).on(...).then(...)的事情,但我认为没有简单或标准化的方法可以做到这一点——也许只能通过扩展默认的 Promise 类并结合 EventEmitter 类的各个方面。
标签: node.js ecmascript-6 promise eventemitter