Javascript 等待请求完成
我目前正在尝试为MediaWiki扩展制作node.js包装,我需要能够登录。到目前为止,一切似乎都在工作,但我无法让脚本停止并等待请求完成后再返回。这是至关重要的,因为请求必须在返回之前完成,才能返回正确的值,而不是未定义的值。我正在使用node.js的请求模块。当前的HTTP POST处理程序如下所示Javascript 等待请求完成,javascript,node.js,httprequest,mediawiki,Javascript,Node.js,Httprequest,Mediawiki,我目前正在尝试为MediaWiki扩展制作node.js包装,我需要能够登录。到目前为止,一切似乎都在工作,但我无法让脚本停止并等待请求完成后再返回。这是至关重要的,因为请求必须在返回之前完成,才能返回正确的值,而不是未定义的值。我正在使用node.js的请求模块。当前的HTTP POST处理程序如下所示 var post = function(data) { var r; var options = {}; options.url = module.expor
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
,将回调函数作为第二个参数,在请求完成时运行。按照惯例,回调应该至少包含两个参数:一个是错误
,如果一切正常,它应该是空
,另一个是结果
,它是异步过程的结果:
post ({foo: 'bar'}, function(err, result) {...});
太棒了!非常感谢你。