gpt4 book ai didi

javascript - 等待请求完成

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:31 24 4
gpt4 key购买 nike

我目前正在尝试为 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) {...});

关于javascript - 等待请求完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22443493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com