网上查询了很多,都没有找到方法,于是来这求助 因为 NodeJS 异步执行的原因,所以导出
var data;
var ep = new eventproxy();
request('http://www.example.com', function(err, res, body){
data = body;
ep.emit('event1',data);
});
ep.all('event1', function (data) {
console.log(data); // -> 这里能打印出值
}
module.exports = data; // ->因为异步执行,这里没有值
请问我如何导出 data ?
笨方法: 定义个全局变量,在回调里面赋值。 坐等楼下大神解答。
@destec 哈哈,看来你是还没有懂异步的原理,定义全局变量是不行的
@jsanswer1 代码没看清,原来已经有全局变量了。那试试直接module.export function呢?
在 console.log(data); 这行调用你的函数不就可以了嘛
@leapon 我是想导出data这个值供其它模块使用
module.exports = function(callback){
var ep = new eventproxy();
request('http://www.example.com', function(err, res, body){
ep.emit('event1',data);
});
ep.all('event1', function (data) {
console.log(data); // -> 这里能打印出值
callback(data);
}
}
试了下这样 var EventProxy = require(‘eventproxy’); var ep = new EventProxy(); module.exports = function(callback){ var data = 1000; var tt = { data:data, cb:callback } ep.emit(‘event1’, tt); } ep.all(“event1”, function(tt){ console.log(tt.data); // -> 这里能打印出值 tt.cb(tt.data + 1); });
var _ = require(“underscore”); ep.all(‘event1’, function (data) { _.extend(module.exports, data); }
@airyland 明白了,现在感觉node异步执行用不好简直就是个坑,刚接触Node,瞬间无爱了
@jsanswer1 等你适应了就爱了,爱得痛了
@jsanswer1 习惯后就觉得其实不错
@russj 好精辟