Адаптация к предыдущему вопросу, ReferenceError: объект не определен - PullRequest
0 голосов
/ 03 апреля 2020

Предыдущий вопрос был помечен как дубликат со ссылкой, ведущей меня сюда: Как вернуть ответ от асинхронного вызова? .

Я все еще не смог найти решение, но я думаю, мне потребуется 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);

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете преобразовать свою функцию, чтобы она возвращала обещание, а затем использовать 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);

Обратите внимание, что ваш вызов должен произойти в асинхронной области c. Если вы находитесь в глобальной области, вы можете использовать:

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

См. Использование await в глобальной области без асин c ключевое слово для получения более подробной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...