1

我正在为 Node.js 设计和实现一个 API,以便使用x3270 工具通过 IBM3270 协议从 Ubuntu 访问 IBM 大型机。因此 Node.js 进程spawn s3270处理并使用它的stdin,stdoutstderr与 IBM 大型机进行通信。

我已经实现了以下接口:

var hs = require('./hs');

var session = hs.createSession(opts);

session.on('error', function(err) {
  console.log('ERROR: %s', err.message);
});

session.on('connect', function() {
  console.log('** connected');
  session.send('TRANS');
});

session.on('response', function(res) {
  console.log(res);
  session.disconnect();
});

session.on('disconnect', function() {
  console.log('** disconnected');
  session.close();
});

session.on('close', function() {
  console.log('** closed');
});

session.connect();

一切运作良好。

问题如下。我想使用Q Promise 库来让使用我的 API 的客户端代码更有条理,并且还有 Node.js 之类的 API,其形式为session.send(trans, cb(err, res) {}). 我没有意识到我应该如何send以接受回调的方式实现该函数

概括我的问题,我想知道像 API 一样设计 Node.js 我应该首先实现什么:

  • 发出事件并使用它然后实现OR的简单send(trans)函数send('trans', cb(err, res) {})
  • 首先实施send('trans', cb(err, res) {})(我不知道如何)然后实施事件或
  • 像 API 一样实现 Node.js 的正确方法是什么

我正在寻找的是在设计 Node.js 之类的 API 时的一般工作流程和设计原则,这些 API也可以被 Q Promise 库使用。

4

1 回答 1

0

我意识到有两种方法可以为 Node.js 设计异步 API:

  • 基于回调的,可以用EventEmitter
  • 基于 Promise 的,可以用,var d = Q.defer();return d.promise;Q库实现d.resolve();

我使用 Q 库以基于 Promise 的方法实现了我的 API,只是为了让我的代码更有条理。此外,Q 库具有 和 等功能,Q.nfcall();可以将基于回调的 Node.js API 转换为基于 Promise 的等价物。Q.nfapply();Q.nfbind();

于 2013-07-09T13:42:04.520 回答