@run182

Почему fetch не присваивает значение переменной?

var auth = true;		
fetch('ajax.php')
	.then(function(response) {
		return response.json();
	})
	.then(function(res) {
			auth = false;
	})
	.catch(alert);	
console.log(auth);


Код выше возвращает true. Как мне правильно переназначить переменную auth в зависимости от ответа в fetch?
  • Вопрос задан
  • 237 просмотров
Решения вопроса 1
@run182 Автор вопроса
Реализовал через Promise:
var wasAuth = new Promise(
    function (resolve, reject) {
        fetch('ajax.php')
            .then(function(response) {
                return response.json();
            })
            .then(function(res) {
                resolve("Auth == true");
                // OR
                reject(new Error("Auth == false"));
            })
            .catch(alert);
       }
);
var sell = function () {
   wasAuth
         .then(function (fulfilled) {
             console.log(fulfilled); // Auth == true
         })
         .catch(function(error) {
            console.log(error.message); // Auth == false
        });
};
sell();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
YumeReaver
@YumeReaver
Бургомистр
У вас сначала выводится в консоль переменная, а затем приходит ответ. Причем неважно какой.
ajax.php
<?php
$myObj->user = "John";
$myObj->isAuth = "true";

$myJSON = json_encode($myObj);

echo $myJSON;
?>

JS
var auth = false;
fetch('ajax.php')
  .then(function(response) {
    return response.json();
  })
  .then(function(res) {
      auth = res.isAuth;
      console.log("response: " + auth);
  })
  .catch(alert);
console.log("document ready: " + auth);

Результат:
5cb70e126cd5f178415468.png
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы