首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提供数据处理方面的进展

提供数据处理方面的进展
EN

Stack Overflow用户
提问于 2018-06-04 07:45:13
回答 1查看 36关注 0票数 1

我已经编写了一个Node包,它执行一些密集的数据处理。我可以通过console.log查看进度,但我希望为最终用户提供一些以事件驱动的方式进行监控的方法。基本上,它类似于返回一个promise,除了每个“步骤”都有一个事件而不是一个then事件,然后最终使用数据进行解析。

不幸的是,我对Node streams (我猜这是我需要的东西)了解不够,无法做到这一点。我能得到一些建议吗?我如何创建一个流,该流在每次进度增加1%时都会更新,然后最终给出计算数据?

EDIT:作为示例,请考虑以下循环:

代码语言:javascript
复制
for(let i = 0; i < N; i++) {
    intensiveFunction();
    console.log(`${i} of ${N} completed`);
}

我想要做的是

代码语言:javascript
复制
for(let i = 0; i < N; i++) {
    intensiveFunction();
    // send user a signal that i/N of the task has been completed
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 08:46:58

您不需要使用streams,您可以使用EventEmitter,并发出当前进度或任何您想要的事件。

my-package.js

代码语言:javascript
复制
const EventEmitter = require('events');

// Create a class that extends from EventEmitter
// And now you can emit events when something happens, e.g., progress update
class MyPackage extends EventEmitter {

    async intensiveFunction() {
        // Something
    }

    async process() {

        for(let i = 0; i < N; i++) {
            await this.intensiveFunction();
            this.emit('step', i, N); // Or send progress in % or whatever you want
        }
    }
}


module.exports = MyPackage;

index.js

代码语言:javascript
复制
const MyPackage = require('my-package');

const package = new MyPackage();

package.on('step', (step, total) => console.log(`${step}/${total}`));
package.process();

您可以提供完整的事件API,也可以将其与promises混合使用。这意味着一旦完成,process就可以解析,或者您可以发出end事件,或者两者兼而有之。

代码语言:javascript
复制
async process() {

   for(let i = 0; i < N; i++) {
      await this.intensiveFunction();
      this.emit('step', i, N); // Or send progress in % or whatever you want
   }

   // Emit the end event
   this.emit('end', result);       

   // And resolve the promise
   return result; // Whatever result is
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档