我有一个函数用于发送请求包的GET http请求。 这很好用。
//file1.js
var request = require('request');
methods.testcall = function(callback){
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
callback(body)
}
if(!error && response.statusCode == 429){ // Rate limit.., try again 1s
setTimeout(this(callback), 1000);
}
})
};
在下一个文件中,我调用此函数两次。我认为2请求可以一次运行。所以当请求到达时我会调用回调函数。 在日志中我看到了结果。但是,你看到我的评论,我想等待所有testcall(),因为我想确保所有数据都到达我的服务器。
//file2.js
test.methods.testcall(function(response){
console.log(response)
});
test.methods.testcall(function(response){
console.log(response)
});
// Here, i want to wait for all testcall function.
// When all testcall function sent response
// Im ready to do smtng :)
我怎么能在那里等待这两种方法? 非常感谢!
答案 0 :(得分:1)
这未经过测试,我认为它会对你有用,它正在使用q
Sensor.getReportingMode()
答案 1 :(得分:0)
您可以嵌套testcall调用:
test.methods.testcall(function(response1) {
test.methods.testcall(function(response2) {
doSomething(response1, response2)
})
})
在该请求完成之前,不会执行对testcall
内部调用的回调,这样您就可以访问这两个响应。
这种方法很难遵循,特别是如果你有更多的电话要求。您必须继续嵌套它们(也称为callback hell)
为了简化流程,您还可以使用async.js或Promise库等库,例如Bluebird.js
对于并发请求,请查看此问题的详细方法:How can I wait for set of asynchronous callback functions?
答案 2 :(得分:0)
现在它的作品,好
methods.test = function (callback){
request(url...., function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("done");
callback(body)
}else if(!error && response.statusCode == 429){ // Rate limit
console.log("rateLimit");
setTimeout(function(){
methods.test(callback)
},1000);
}else if(!error && response.statusCode == 403){ // Forbidden
console.log("Forbidden");
setTimeout(function(){
methods.test(callback)
},1000);
}
})
};
var responseNumber = 0;
test.methods.test(function(response){
responseNumber += 1;
checkResponse(responseNumber)
});
test.methods.test(function(response){
responseNumber += 1;
checkResponse(responseNumber)
});
function checkResponse(responseNumb)
{
if(responseNumb == 2){
console.log("done");
}
}