有时在nodejs中我必须向其他主机发出请求。我的功能必须等到这个请求的响应完成,但通常他们来到下一行而没有等待完成。 为了简化问题,我制作了一个简单的snipp代码,我想知道如何从这个函数中获取数据
function testCallback(){
var _appData;
setTimeout(function(){
var a = 100;
getData(a);
}, 200);
function getData(data){
_appData = data;
}
return _appData;
}
console.log('testCallback: ', testCallback());
console.log发出undefined,我想知道这个函数如何获得结果是100
答案 0 :(得分:3)
基本上setTimeout是异步的,所以代码会继续运行,代码就会变成这样:
function testCallback(){
var _appData;
return _appData;
}
其中,是的,它未定义,因为您没有设置任何内容。
您需要做的是在函数中使用回调,因此当完成长任务(setTimeout)时,您将返回数据。
这样的事情:
function testCallback(cb){
setTimeout(function(){
var a = 100;
getData(a);
}, 200);
function getData(data){
cb(null, data);
}
}
并且在调用它时你必须传递一个函数作为参数(回调标准有2个参数,(错误,值)。)
testCallback(function(err, value) { console.log(value); });