我想要定义一个函数,从GET请求的响应中获取特定ID的列表:
var getList = function (){
var list = [];
https.get(options).on('response', function (response) {
var body = '';
response.on('data', function (chunk) {
body += chunk;
});
response.on('end', function () {
var obj = JSON.parse(body);
for (i=0 ; i<obj.length ; i++){
list.push(obj[i].id);
}
//console.log(list);
//return list;
});
});
};现在,我想在其他函数中使用这个函数中的列表,或者简单地将它赋值给一个变量。我了解到,由于函数是异步的(嗯,https.get函数),返回列表并不意味着什么,因为其他代码不会等待这个函数完成。我是否必须将所有剩余的代码放入response.end调用中?我知道我错过了一些很明显的东西..。
发布于 2013-11-21 14:16:45
您可以接受回调作为参数,并使用response.end处理程序中的相关数据调用它:
var getList = function (successCallback){
var list = [];
https.get(options).on('response', function (response) {
var body = '';
response.on('data', function (chunk) {
body += chunk;
});
response.on('end', function () {
var obj = JSON.parse(body);
for (i=0 ; i<obj.length ; i++){
list.push(obj[i].id);
}
// invoke the callback and pass the data
successCallback(list);
});
});
};然后可以调用getList函数并传入回调:
getList(function(data) {
// do some stuff with 'data'
});当然,其他选项是使用一些实现应许模式的库来避免回调地狱。
发布于 2013-11-21 14:15:41
使列表成为全局的或可访问的
var list = []
//declare a get method
function getUpdatedList(){
return list;
}如果在ajax完成之前调用,您将得到实际的数据数组,但在正常情况下只使用回调函数,如
function getList(callback){
///
//
response.on('end', function () {
var obj = JSON.parse(body);
for (i=0 ; i<obj.length ; i++){
list.push(obj[i].id);
}
callback(list);
});
}https://stackoverflow.com/questions/20123187
复制相似问题