尝试在javascript中使用请求方法时遇到问题我无法保存值。我将运行一段代码,如:
let savedData;
request({
url: url,
json: true
}, function (err, resp, body) {
if (err) {
return;
}
savedData = body.data;
});
console.log(savedData);
我知道请求没有阻止或者是什么,所以我认为它是在console.log
之后运行的?我只需要知道如何保存所需的数据,以便稍后在方法中使用。
答案 0 :(得分:4)
您的代码工作正常,您只是忽略了作为request()
的第二个参数提供的回调是异步执行的事实。
执行console.log()
时,网络请求可能 尚未成功返回该值。
Take a look at the documentation for the request()
function.
它声明函数调用采用以下签名,
request(options, callback);
在JavaScript中,回调的执行方式与名称相同; 在完成首先需要的操作后,通过执行提供的函数来回调。
这种异步行为在发出网络请求时尤其突出,因为您不希望程序冻结并等待网络请求检索或发送您请求的内容。
function callback() {
console.log('I finished doing my asynchronous stuff!');
console.log('Just calling you back as I promised.');
}
console.log('Running some asynchronous code!');
request({...options}, callback);
console.log('Hi! I'm being called since I'm the next line of code; and the callback will be called when its ready.');
<强>输出强>
- 运行一些异步代码!
- 嗨!因为我是下一行代码,所以我被调用了;和回调 将在准备好时调用。
- 我完成了异步操作!
- 按照我的承诺给你回电话。
答案 1 :(得分:2)
您需要在请求函数的回调中执行其余代码,或使用promise。在saveedData出现之前,该回调之外的任何内容都将执行。