2013-06-28 45 views
1

我設計和實施的Node.js從Ubuntu的使用通過x3270 tool IBM3270協議來訪問IBM大型機的API。因此,Node.js處理spawns3270進程並使用它的stdin,stdoutstderr與IBM大型機進行通信。Node.js的API一樣的設計原理和工作流程

我已經實現了以下接口:

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 library來獲取使用我的API更加有組織的客戶端代碼,並且還有類似API的Node.js,格式爲session.send(trans, cb(err, res) {})我不知道我應該如何實現send函數的方式,它接受回調

歸納我的問題,我想知道像設計Node.js的API應該是什麼我第一次執行:

  • 簡單send(trans)功能發出的事件和使用這種然後實現send('trans', cb(err, res) {})
  • 實現send('trans', cb(err, res) {})第一(我不知道怎麼做),然後執行事件或
  • 是如何實現的Node.js像API的正確方法

什麼我要找的是一般工作流程和設計,比如API,可以由Q承諾庫也消耗的Node.js時的設計原則。

+0

它可能不完全回答你的問題,但看看Q的'denodeify'功能。它可以使用任何基於回調的函數,並將其轉換爲等價的基於promise的函數。 –

+0

'Q.denodeify'或'Q.nfbind'通過Node.js風格函數創建一個承諾:'send(trans,cb(err,res){})'。關鍵是如何實現使用'send(trans)'和主要問題代碼清單中描述的事件接受回調的'send'函數。無論如何謝謝你! –

+0

嗨,我試圖在這裏做同樣的事情,但我正在努力開始!你介意分享你的代碼樣本嗎? – user1513388

回答

0

,因爲我意識到有兩個設計異步API爲Node.js的方法:

  • 回調爲主可與實施EventEmitter
  • 承諾爲基礎的可與實現var d = Q.defer();return d.promise;d.resolve();Q library

我我使用Q庫僅使用基於承諾的方法填充我的API,以便使我的代碼更加有條理。此外,Q庫具有功能,例如Q.nfcall();,Q.nfapply();Q.nfbind();將基於回叫的Node.js API轉換爲基於承諾的等效。