在其他事件结束时发出事件(事件链接)

时间:2017-03-28 03:19:21

标签: javascript node.js chaining eventemitter

我有一个按顺序执行以下操作的软件:

download text files from s3
reads the files
collect the data from files

程序是异步同步的 - 每个阶段都是异步的,但它在很大程度上取决于前一阶段的输出,所以我使用Promises来构建链接。

这个体系结构的问题是使用了很多cpu,因为我在提取和收集阶段产生了子进程。所以我决定改变事件:

我是怎么做的:

我有3个eventEmitters:downloadFile,extract,collect:

downloadfile.emit("copy", s3file);
downloadfile.on("error", callback);
downloadfile.on("close", (file) => {
 extract.emit("file", file);
 extract.on("error", callback);
 extract.on("close", (file) => {
   collect.emit("data", file.data);
   collect.on("error", callback);
   collect.on("close", (data) => {
      data is here... i can use without waiting all the other files.
   });
 });
});

但这不是很易读......我更喜欢Promise方式:

Promise.resolve(options)
  .then(downloadFiles)
  .then(extract)
  .then(collect);

所以我在想......是否有可能将这些事件联系起来?我的意思是,事件的输出将是其他的输入,就像Promises一样?如果是这样,我怎么能实现呢?

0 个答案:

没有答案