Как получить результат от функции с запросом get? - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть фрагмент кода, который отправляет запрос GET другой части моего веб-сайта в функции.

function getStatus(ID) {
    $.get('/api/'+ID+'/info', function(statusCallback) {
        return statusCallback;
    });
}

console.log(getStatus(ID));

То, что я ожидал, что этот код вернется, а затем в журнале будет информация, которая мне нужна.

То, что я на самом деле получаю в консольном журнале, это

undefined

Что я могу сделать, чтобы получить реальный результат?

Ответы [ 3 ]

0 голосов
/ 09 сентября 2018

Вы делаете асинхронную операцию. В вашем случае используется обратный вызов. Если вы хотите напечатать statusCallback, вам нужно будет console.log, как упомянул Кристос.

Также

console.log(getStatusId())

вернет undefined, поскольку это значение по умолчанию, возвращаемое функцией, которая не имеет явного возврата. Ваша функция не имеет оператора return, она только вызывает какой-то асинхронный метод.

Кстати, попробуйте обещания вместо обратных вызовов, если можете;)

0 голосов
/ 09 сентября 2018

С ES7 вы можете использовать async await

async function getStatus(ID) {
  $.get('/api/'+ID+'/info', function(statusCallback) {
    // This is executed in the future, but await knows how to deal with it
    return statusCallback;
  });
}
console.log(await getStatus(ID));

Это хорошая практика для начала, потому что код становится намного легче читать.

0 голосов
/ 09 сентября 2018

Вам необходимо изменить свои функции, как показано ниже:

 function getStatus(ID) {
     $.get('/api/'+ID+'/info', function(statusCallback) {
         console.log(statusCallback);
     });
 }

Функция, которую вы передаете в качестве второго параметра вашего вызова get, называется успешным обратным вызовом. Он будет вызван после успешного завершения запроса get, который выдается при каждом вызове функции getStatus. Только тогда у вас есть доступ к тому, что вернул сервер, и вы можете довольно легко получить к нему доступ, как указано выше.

Обновление

Если вы хотите вернуть данные, которые отправляет сервер, вы должны сначала объявить переменную

function getDataById(ID){
   function callback(data){
       return data;
   }

   $.get('/api/'+ID+'/info', function(data) {
       return callback(data);
   });
}
...