Nodejs 异步流程控制库 eventr 介绍

Nodejs 异步流程控制库 eventr 介绍

最近写了个 node 的异步流程控制库,名字叫 eventr。

github 的地址在:https://github.com/alsotang/eventr

这个库利用事件的思维来解决 callback hell 的问题,使用的方式跟 eventproxy 很像。只不过在实际的工作中,我遇到了 eventproxy 在对付不定参数的事件组时的不足,所以主要的 on 接口采用了接受事件数组的方式,并且回调函数返回一个以各事件为 property 的hash。

另外,这个库的实现非常简单,由于在后端,我们很少使用 once,也很少对事件进行解绑。所以这些我都倾向于不去实现,而是交给垃圾回收。

这样一来 eventr 的代码可以说非常适合新手进行入门学习。

以下是一段示例代码:用 fetchurl 函数去抓取 google 和 yahoo 的页面,并分别抛出事件,然后在 on 事件中对他们的结果进行处理。接口还是比较简单的。

it('should work with event array', function (done) {
  var et = new Eventr();
  fetchurl('google', function (err, content) {
    et.emit('page1', content);
  });
  fetchurl('yahoo', function (err, content) {
    et.emit('page2', content);
  });
  // edata is a hash
  et.on(['page1', 'page2'], function (edata) {
    edata.page1.should.equal('pagecontentgoogle');
    edata.page2.should.equal('pagecontentyahoo');
    done();
  });
});

更多的示例可以到 https://github.com/alsotang/eventr 来查看,文档也是比较清晰的。:)


4 回复

Node.js 异步流程控制库 eventr 介绍

最近写了一个 Node.js 的异步流程控制库,名字叫 eventr

GitHub 地址在:https://github.com/alsotang/eventr

这个库利用事件的思维来解决回调地狱(callback hell)的问题,使用方式与 EventProxy 类似。不过,在实际工作中,我发现 EventProxy 在处理不定数量参数的事件组合时存在一些不足。因此,我在 eventr 中主要的 on 接口采用了接受事件数组的方式,并且回调函数会返回一个以各个事件为属性的哈希对象。

此外,这个库的实现非常简单,因为后端开发中很少使用 once 方法,也很少需要对事件进行解绑。因此,这些功能我都倾向于不实现,而是让它们由垃圾回收机制处理。这样一来,eventr 的代码非常适合新手入门学习。

以下是一段示例代码:使用 fetchurl 函数去抓取 Google 和 Yahoo 的页面,并分别抛出事件。然后在 on 事件中对它们的结果进行处理。接口相对简单明了。

const fetchurl = require('fetchurl'); // 假设 fetchurl 是一个用于获取网页内容的库
const Eventr = require('eventr');

it('should work with event array', function (done) {
  const et = new Eventr();

  // 模拟 fetchurl 获取网页内容
  fetchurl('http://www.google.com', function (err, content) {
    if (err) throw err;
    et.emit('page1', content);
  });

  fetchurl('http://www.yahoo.com', function (err, content) {
    if (err) throw err;
    et.emit('page2', content);
  });

  // edata 是一个哈希对象
  et.on(['page1', 'page2'], function (edata) {
    console.log(edata.page1); // 输出 Google 页面内容
    console.log(edata.page2); // 输出 Yahoo 页面内容
    done(); // 测试完成
  });
});

在这个示例中,我们创建了一个新的 Eventr 实例,并通过 fetchurl 函数获取两个网页的内容。当获取到内容后,我们使用 emit 方法抛出相应的事件,并在 on 回调中处理这些事件。on 方法接收一个包含事件名称的数组,并在所有事件都触发后执行回调函数。回调函数中的 edata 参数是一个包含所有事件数据的哈希对象。

更多示例可以在 GitHub 仓库 中查看,文档也相当清晰。希望这个库能帮助大家更好地管理 Node.js 应用中的异步流程。


赞,一直用async的飘过

Node.js 异步流程控制库 eventr 介绍

最近写了一个 Node.js 的异步流程控制库,名字叫 eventr。它利用事件驱动的方式来解决常见的回调地狱(callback hell)问题。

GitHub 地址

你可以在这里找到这个库的源码和更多详细信息:

使用方式

eventr 的使用方式与 eventproxy 类似,但是为了更好地处理不定数量的参数,主要的 on 接口采用了接受事件数组的方式。这样,在回调函数中可以方便地访问到各个事件的结果。

示例代码

以下是一段示例代码,演示如何使用 fetchurl 函数获取 Google 和 Yahoo 的页面内容,并在接收到所有结果后处理它们:

const Eventr = require('eventr');
const fetchurl = require('fetchurl');  // 假设这是一个用于抓取网页内容的函数

// 创建一个新的 Eventr 实例
const et = new Eventr();

// 模拟 fetchurl 函数,实际环境中替换为你自己的实现
function fetchurl(url, callback) {
  setTimeout(() => {
    const content = `${url} page content`;
    callback(null, content);
  }, 1000);
}

// 抓取 Google 页面
fetchurl('google', (err, content) => {
  if (!err) {
    et.emit('page1', content);
  }
});

// 抓取 Yahoo 页面
fetchurl('yahoo', (err, content) => {
  if (!err) {
    et.emit('page2', content);
  }
});

// 注册事件处理函数
et.on(['page1', 'page2'], (edata) => {
  console.log('Google Page:', edata.page1);
  console.log('Yahoo Page:', edata.page2);
  // 可以在此处添加其他逻辑处理
});

// 输出结果
/*
Google Page: google page content
Yahoo Page: yahoo page content
*/

总结

eventr 库的设计非常简单,适合新手学习使用。你可以在 GitHub 上找到更多的示例和详细的文档。希望这个库能帮助你更好地管理异步流程。

回到顶部