在node.js模块导出中合并多个callback
我有一个sails.js服务,它使用restler(rest-client)来调用外部API并获取数据。
模块看起来像这样:
var rest = require('restler'); module.exports = { config: { url: sails.config.remote_api.base_url.concat('/countries'), rejectUnauthorized: sails.config.remote_api.validateSsl, options: { 'Content-Type': 'application/json' } }, find: function(headers, payload, callback) { var request = rest.get(this.config.url, this.config.options); sails.log.info('Outgoing Request', { log_id: headers[x - request - id], method: request.method, host: request.host, url: request.url }); request.on('2XX', function(data, response) { callback(data, response); }); } }
在上面的代码中, request.on('2XX',…)处理响应代码在200系列中时发出的事件。
当我们为响应代码为300,400,500系列时发出的事件添加其他处理程序…这会为每个块创build相同的callback函数的重复。 例如
var rest = require('restler'); module.exports = { config: { url: sails.config.remote_api.base_url.concat('/countries'), rejectUnauthorized: sails.config.remote_api.validateSsl, options: { 'Content-Type': 'application/json' } }, find: function(headers, payload, callback) { var request = rest.get(this.config.url, this.config.options); sails.log.info('Outgoing Request', { log_id: headers[x - request - id], method: request.method, host: request.host, url: request.url }); request.on('2XX', function(data, response) { callback(data, response); }); request.on('3XX', function(data, response) { callback(data, response); }); request.on('4XX', function(data, response) { callback(data, response); }); request.on('5XX', function(data, response) { data = {}; data.succeeded = false; data.failureCode = 'SYSTEM ERROR'; data.failureReason = 'A system error has occurred. Please try again. If the problem persists contact support'; callback(data, response); }); request.on('error', function(data, response) { data.succeeded = false; data.failureCode = 'SERVICE UNAVAILABLE'; data.failureReason = 'The service is temporarily unavailable. Please try again later.'; callback(data, response); }); } }
我们如何避免以下几行的重复?
function(data, response) { callback(data, response); }
不,你真的不应该。 你已经基本上处理了像2XX
, 3XX
等不同的事件。每个事件都是分开处理的,这是一个很好的做法。 再简化可能会损坏整洁的devise。
尽pipe你可以直接使用callback
代替
function(data, response) { callback(data, response); }
喜欢这个
request.on('2XX', callback);
- Node.JS + Socket.io + MySql:查询callback仅调用2次
- 通过node.js理解javascriptcallback的概念,特别是在循环中
- Node.js:等待来自asynchronous调用的响应
- 有没有更好的方法来处理Node.js / Expressjs中的嵌套callback?
- 在同步一个内部等待asynchronouscallback函数
- 创build一个用于AJAX的简单Node.js Web服务
- 节点MySQL插入,通过填充3个表格检索具有完整注册stream程的callback的多个表格
- 如何处理asynchronous函数和集合?
- node.js – post响应不等待callback完成