从具有异步函数的 Node.js 模块返回值
Return value from Node.js module with asynchronous function
我为我的 Node.js 项目编写了一个模块,它处理一些数据并返回结果,如下所示:
var result = require('analyze').analyzeIt(data);
问题是analyze.js
依赖于异步函数。基本上它看起来像这样:
var analyzeIt = function(data) {
someEvent.once('fired', function() {
// lots of code ...
});
return result;
};
exports.analyzeIt = analyzeIt;
当然,这是行不通的,因为result
返回时仍然是空的。但是我该如何解决这个问题呢?
你解决它的方式与 Node 在其 API 中解决它的方式相同:使用回调,可能是简单的回调、事件回调或与某种承诺库关联的回调。前两个更像 Node,承诺的东西非常黑醋栗。
这是简单的回调方式:
var analyzeIt = function(data, callback) {
someEvent.once('fired', function() {
// lots of code ...
// Done, send result (or of course send an error instead)
callback(null, result); // By Node API convention (I believe),
// the first arg is an error if any,
// the second data if no error
});
};
exports.analyzeIt = analyzeIt;
用法:
require('analyze').analyzeIt(data, function(err, result) {
// ...use err and/or result here
});
但正如 Kirill 指出的那样,您可能希望analyzeIt
返回一个EventEmitter
,然后发出一个data
事件(或者您喜欢的任何事件,真的),或者在出错时error
:
var analyzeIt = function(data) {
var emitter = new EventEmitter();
// I assume something asynchronous happens here, so
someEvent.once('fired', function() {
// lots of code ...
// Emit the data event (or error, of course)
emitter.emit('data', result);
});
return emitter;
};
用法:
require('analyze').analyzeIt(data)
.on('error', function(err) {
// ...use err here...
})
.on('data', function(result) {
// ...use result here...
});
或者,再次,某种承诺库。
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 如何使用 node.js 比较两个 json 数组
- Node.js's Buffer.writeFloatBE in Javascript
- node.js:setInterval()正在跳过调用
- 如何处理node.js节点mongodb中的连接和查询队列
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js最有效地解析网页
- 在openshift node js应用程序中获取请求
- 正在删除node.js中已验证的网站
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js中的JavaScript原型对象效率
- node.js请求数据事件未在CORS ajax调用中触发
- 使用node.js制作网站
- 使用node.js服务器中的evernote api获取note内容
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 在Node.js中上传和检索图像
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何使用 Node JS 获取 JSON 嵌套数组值