如何使用Node.js中asynchronous函数返回的数据?
我想定义一个函数,该函数从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; }); }); };
现在,我想在其他函数中使用该函数的列表,或者简单地将它分配给一个variables。 我明白,因为函数是asynchronous的(好吧, https.get
之一),返回列表并不意味着其他代码不会等待这个函数完成。 我是否必须将所有剩余的代码放在response.end
调用中? 我知道我错过了一些非常明显的东西
您可以接受callback作为参数,并使用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
函数并传入一个callback函数:
getList(function(data) { // do some stuff with 'data' });
当然其他的select是使用一些实现Promise模式的库来避免callback地狱。
使列表成为全局或可访问的
var list = [] //declare a get method function getUpdatedList(){ return list; }
如果你在ajax完成之前调用,你会得到null,你会得到实际的数据数组,但在正常情况下只使用callback函数
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的Node.js套接字挂起错误
- webpack-dev-server监视并正确编译文件,但浏览器无法访问它们
- Jade textarea中的长文本块?
- AngularJS – 显示/隐藏导航项目,如果用户login
- Node.js process.stdin问题typescript(tty.ReadStream vs ReadableStream)
- 你将如何将函数构造函数对象方法与原型一起封装在使用exports或module.exports的单个模块中
- 在Node.js中如何将multipart / form-data上传的图像转换为base64格式
- 如何访问由gulp-grey-matter插件创build的数据对象(使用nunjuck编译html文件时)
- 嵌套的路由请求被解释为请求CSS文件