在NodeJs中,我怎么能等到我的http get完成
In NodeJs how can I wait until my http get is finished?
编辑:我想更清楚地解释这个问题,我的目的是在"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;
});
由于node主要是异步的并且使用回调(与承诺相反),因此您可能希望定义一个将被调用的函数,该函数接受一个参数,该参数是异步调用的输出。
例如(在您的情况下):您在response.on('end', ...
的回调中获得courseName
。您可以定义如下函数:
function processCourseName(name) {
console.log('do something with', name);
}
然后在console.log('finished');
之后,只需添加对该方法的调用
...
courseName = ...
console.log("finished");
processCourseName(courseName); //whenever the request is finished, then process the course name in a separate function
更多的解释:你的return courseName
语句在http.request
调用完成之前退出了函数,因此在courseName
被分配到一个适当的值之前。
更多编辑:我看了看webot
模块,它看起来像是以不支持异步代码的方式编写的?通常库传递一个回调函数,您可以在异步处理完成时调用,例如function(info, callback) {}
,但webot
似乎没有。最好的办法是将courseName
赋值给给定的info
对象(info.courseName
),并通知程序在其他地方使用courseName。
指出:
- 你应该使用像mikeal/request这样的东西向外发出请求,因为它是专门为这样做编写的。
相关文章:
- 在我的情况下,如何进行http请求
- 我如何设置HTTP头“;访问控制允许起源”;用于来自thttpd web服务器的HTTP响应
- 为什么我在Cloud9中的http请求总是返回错误
- 为什么我的$http.post返回一个400错误
- Angular没有't在http请求后更新我的对象
- 为什么我的 http 请求不适用于长 JSON 字符串
- 在我的案例中,如何测试http请求
- 当我的HTTP呼叫因互联网访问而失败时,有没有办法发出错误警报
- 为什么我的 http://localhost CORS 源不起作用
- 为什么我的范围在 angularjs 和 d3js 上的$http函数中丢失了
- 如何在我的基于ajax html5的网站模板 http://www.musicep.com/ 上插入广告?我尝试了一切,
- 如何解决我的http请求问题
- 如何解决我的http请求问题
- 我的HTTP over AJAX(javascript)有什么问题
- 如何防止DOS攻击我的http服务器写在node.js
- 如何显示叠加加载gif,同时完成我的http.Post in angular
- ' '预先挂载到我的HTTP (AJAX) responseText
- Ionic:为什么不是't我的HTTP.GET没有加载我的图像
- 为什么我在Chrome中看不到我的HTTP头
- 在NodeJs中,我怎么能等到我的http get完成