【问题标题】:Adaptation to previous question, ReferenceError: object is not defined适应上一个问题,ReferenceError: object is not defined
【发布时间】:2020-04-03 14:00:07
【问题描述】:

上一个问题被标记为重复,链接指向我这里:How do I return the response from an asynchronous call?

我仍然找不到解决方案,但我想我需要 AJAX 来返回此对象,因为我的函数/GET 请求尚未完成,这导致我提出一个新问题。我该如何调整它以异步返回。我了解 Promises 和 async/await 的概念,但我不确定如何在此处实现这一点,以便可以全局访问该对象。

[原问题]

从以下函数返回对象,但我收到此错误ReferenceError: object is not defined。我想全局访问它,但由于范围似乎无法访问该对象。有什么我遗漏的吗?

设置全局变量时,这似乎没有更新。

例如在外部设置var globalObject = {}; 并在对象内部使用globalObject = object 似乎不会更改变量{}

function getTicket (ticketID) {

  var urlID = contentID;


  var request = require("request");

  var options = {
    method: 'GET',
    url: `https://www.mywebsite.com/api/${urlID}/body.json`,
    headers: {'content-type': 'application/json', authorization: 'Basic PASSWORD=='}
  };

  request(options, function (response, body) {


    var obj = JSON.parse(JSON.stringify(body));
    var objContent = JSON.parse(obj.body);

    var object = {
      id: urlID,
      url: 'https://www.mywebsite.com/api/' + urlID,
      value: objContent
    };

    console.log(object.id);
    console.log(object.url);
    console.log(objContent.body[0].body);



  });
return object;
}

getTicket(380289);

【问题讨论】:

    标签: javascript json ajax


    【解决方案1】:

    您可以将您的函数转换为返回一个 Promise,然后在调用它时使用 await:

    function getTicket(ticketID) {
      var urlID = contentID;
    
      var request = require('request');
    
      var options = {
        method: 'GET',
        url: `https://www.mywebsite.com/api/${urlID}/body.json`,
        headers: { 'content-type': 'application/json', authorization: 'Basic PASSWORD==' }
      };
    
      return Promise(resolve => {
        request(options, function(response, body) {
          var obj = JSON.parse(JSON.stringify(body));
          var objContent = JSON.parse(obj.body);
    
          var object = {
            id: urlID,
            url: 'https://www.mywebsite.com/api/' + urlID,
            value: objContent
          };
    
          console.log(object.id);
          console.log(object.url);
          console.log(objContent.body[0].body);
          resolve(object);
        });
      });
    }
    
    await getTicket(380289);
    

    请注意,您的调用需要在异步范围内进行。如果您在全局范围内,则可以使用:

    (async function() {
      await getTicket(380289);
    })();
    

    详情请见using await on global scope without async keyword

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2014-03-03
      • 1970-01-01
      • 2018-12-26
      • 2020-06-14
      • 2019-02-08
      • 2015-11-19
      相关资源
      最近更新 更多