通过JavaScript的请求方法保存值

时间:2018-04-14 22:25:57

标签: javascript node.js request

尝试在javascript中使用请求方法时遇到问题我无法保存值。我将运行一段代码,如:

let savedData;

request({
  url: url,
  json: true
}, function (err, resp, body) {
  if (err) {
    return;
  }
  savedData = body.data;
});

console.log(savedData);

我知道请求没有阻止或者是什么,所以我认为它是在console.log之后运行的?我只需要知道如何保存所需的数据,以便稍后在方法中使用。

2 个答案:

答案 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出现之前,该回调之外的任何内容都将执行。