请问 NodeJS 如何导出回调函数 callback 中的值?
发布于 9 年前 作者 jsanswer1 8784 次浏览 最后一次编辑是 8 年前 来自 问答

网上查询了很多,都没有找到方法,于是来这求助 因为 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 ?

12 回复

笨方法: 定义个全局变量,在回调里面赋值。 坐等楼下大神解答。

@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 习惯后就觉得其实不错

回到顶部