Создание синхронного вызова API в javascript - PullRequest
0 голосов
/ 28 мая 2019

У меня есть метод в javascript, который вызывает GET API

var PC;
    function GetDetails() {
    $.ajax({
        type: "GET",
        url: Myurl,
        success: function (response) {
            //console.log(response);
            PC= response;
        }
    });
}

Я устанавливаю ответ в переменной с именем ПК и в другом методе я вызываю это

function PerformTask()
{
GetDetails();
console.log(PC);
}

ВМетод GetDetails console.log (ответ);работает, но в PerformTask () console.log (PC) неопределен??так как мне нужно значение ПК для выполнения следующего набора операторов

Я также попытался извлечь вызов API

fetch(Myurl)
        .then(resp => resp.json())
          .then(resp=> setting variable here) ;

Но это не работает (работает, но асинхронно)

Обновление 1

return new Promise(function (resolve, reject) {
    $.ajax({
        type: "GET",
        url: Myurl,
        success: function (response) {
            //console.log(response);;
            resolve(response);
        },
        error: function (err) {
            reject(err);
        }
    });
});

И в Performtask ()

GetPropertyDetails()
    .then(function (data) {
        PC= data;
    });
console.log(PC);

Но все равно ПК не определен

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

В случае успеха вы можете вызвать другой метод, на который вам нужен ответ Поскольку вызов ASYNC, функция не получит ответ.

var PC;
function GetDetails() {
    $.ajax({
        type: "GET",
        url: Myurl,
        success: function (response) {
            //console.log(response);
            PC= response;
            // Your next function 
            PerformTask(PC);
        }
    });
}

function PerformTask(pc)
{
    GetDetails();
    console.log(pc);
}

есть другой способ сделать это, но я думаю, что это плохой способ

$.ajax({
            type: "GET",
            url: Myurl,
            async:false,
            success: function (response) {
                //console.log(response);
                PC= response;
                // Your next function 
                PerformTask(PC);
            }
        });

Используя promise => вы можете использовать async & await

function asyncCall() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(5)
    }, 2000)
  });
}

(async function() {
  const result = await asyncCall();
  if (result) console.log(result)
})()

Надеюсь, это поможет вам.

0 голосов
/ 28 мая 2019

Лучшим вариантом является вызов функции PerformTask () внутри ajax success и передача результата в функцию PerformTask. то есть

   function GetDetails() {
    $.ajax({
        type: "GET",
        url: Myurl,
        success: function (response) {
            //console.log(response);
            PerformTask(response);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...