【发布时间】:2014-03-19 21:19:04
【问题描述】:
编辑:我想更清楚地解释问题,我的目的是在“webot.waitRule()”返回之前做出 http 响应。那么 http 请求应该回调到 webot.waitRule 还是反过来呢?
下面是我在程序中实现模块的代码,我的问题是 该函数在 http 请求得到响应之前返回。我知道节点中的http请求 js是异步的,有什么解决办法吗?我是javascript和nodejs的新手。谢谢。
webot.waitRule('wait_class', function(info) {
var courseName='lol';
var options = {
host: 'api.uwaterloo.ca',
path: '/v2/courses/CS/486/examschedule.json'
};
callback = function(response) {
var str = '';
//another chunk of data has been recieved, so append it to `str`
response.on('data', function (chunk) {
str += chunk;
});
response.on('end',function(){
// console.log(str);
// return "kkk";
var data = JSON.parse(str);
console.log(data['data']['course']);
courseName = courseName+data['data']['course'];
console.log("finished");
// return "lolllll";
// return "nide ke shi "+ courseName;
});
}
var req = http.request(options, callback);
req.end();
console.log("i am finshed");
return courseName;
});
【问题讨论】:
-
return 在异步函数中没有意义......它应该说“完成”时没有完成?
-
注意
callback是全局的... -
你需要使用回调。看起来你已经开始这样做了,所以我不太确定问题出在哪里。
-
这是关于从使用异步调用的函数返回数据的数百个其他问题的重复。标记为 dup。
-
首先,在异步环境中使用 return 根本不是一个好习惯。您应该用更好的设计替换返回,例如模块模式。这样,您就可以为模块提供 courseName 变量。附带说明一下,您可以使用 Async.js 系列函数在函数调用之间进行同步。
标签: javascript node.js httprequest