等待请求完成
Wait for request to finish
我目前正试图使一个MediaWiki扩展的node.js包装器,我需要能够登录。到目前为止,一切似乎都在工作,但我不能让脚本停止并等待请求完成返回之前。这是至关重要的,因为请求必须在返回之前完成,以便返回正确的值而不是未定义的值。我正在使用node.js的请求模块。当前HTTP POST处理程序如下
var post = function(data) {
var r;
var options = {};
options.url = module.exports.apipath;
options.method = "POST";
options.form = data;
request(options, function(error, response, body) {
if (!error) {
if(response.statusCode == 200) {
try {
if((typeof body) == "string") {
var result = JSON.parse(body);
r = result;
} else {
r = body;
}
} catch (e) {
return;
}
}
} else {
console.log("Error: " + error);
}
});
return r;
};
因为request
方法是异步的,所以您需要使您的包装器函数也是异步的:
var post = function(data, callback) {
var r;
var options = {};
options.url = module.exports.apipath;
options.method = "POST";
options.form = data;
request(options, function(error, response, body) {
if (!error) {
if(response.statusCode == 200) {
try {
if((typeof body) == "string") {
var result = JSON.parse(body);
r = result;
} else {
r = body;
}
// Call callback with no error, and result of request
return callback(null, r);
} catch (e) {
// Call callback with error
return callback(e);
}
}
} else {
console.log("Error: " + error);
return callback(error);
}
});
}
然后,您将使用回调函数作为第二个参数调用post
,该参数将在请求完成时运行。按照惯例,您的回调应该至少接受两个参数:一个error
,如果一切正常,它应该是null
,一个result
是异步进程的结果:
post ({foo: 'bar'}, function(err, result) {...});
相关文章:
- 在等待ajax请求时显示微调器并禁用页面
- Javascript在for循环中等待处理请求
- 如何使请求等待上一个请求完成
- 如何解决等待多个请求以javascript发送响应的问题
- 如何等待异步请求完成
- 节点.js等待请求完成
- 等待发出 AngularJS HTTP 请求
- 如何等待 ajax 请求
- 让代码等待,直到 AJAX 请求完成
- 如何在 UI5 中等待 JSONModel.loadData() 请求
- 等待请求完成并返回数据
- 力量角器's on准备等待异步http请求
- 等待React Render,直到请求之后
- AngularJs控制器没有't等待$http请求
- 等待中的两个ajax请求成功函数的执行
- 等待等效请求挂起
- javascript restler如何阻止/等待请求
- AngularJS没有等待HTTP请求完成
- 如何在angularjs中等待多个请求完成
- 如何强制一个AJAX请求等待另一个请求完成