title: Emitting event on close of other event (event chainning)
body: <p>I have a software that does the following in sequence:</p>
  
  <pre><code>download text files from s3
  reads the files
  collect the data from files
  </code></pre>
  
  <p>The program is asynchronous-synchronous - each phase is asynchronous, but it heavily depends on the output of the previous phase, so i'm using Promises for build the chainning.</p>
  
  <p>The problem of this architecture is that is using to much cpu since i'm spawning child processes in the extract and collect phase. So i decide to change to events:</p>
  
  <p>How i'm doing:</p>
  
  <p>I have 3 eventEmitters: downloadFile, extract, collect:</p>
  
  <pre><code>downloadfile.emit("copy", s3file);
  downloadfile.on("error", callback);
  downloadfile.on("close", (file) =&gt; {
   extract.emit("file", file);
   extract.on("error", callback);
   extract.on("close", (file) =&gt; {
     collect.emit("data", file.data);
     collect.on("error", callback);
     collect.on("close", (data) =&gt; {
        data is here... i can use without waiting all the other files.
     });
   });
  });
  </code></pre>
  
  <p>But this isn't very readable... i prefer the Promise way:</p>
  
  <pre><code>Promise.resolve(options)
    .then(downloadFiles)
    .then(extract)
    .then(collect);
  </code></pre>
  
  <p>So i was thinking... is it possible to chain the events? I mean, the output of an event will be the input of other, just like the Promises? If so, how could i achieve that?</p>