LINUX.ORG.RU

Доступ к внешней переменной

 , ,


1

1

Всем радости и здоровья!

Есть простой код

var projects

$.get("/loadprojects", function(data){
    projects = data
})    

console.log(projects)

почему после присвоения переменной projects данне из переменной data не появляются? Пишет что undefined

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

http://javascript.ru/unsorted/async

vden ★★
()
Ответ на: комментарий от vden

Спасибо за ответ но new Deferred() работает только при наличии неких фреймвороков а Promise() вообще не ясен для понимания

technobot
() автор топика

На момент, когда ты делаешь

console.log(projects)

твое

projects = data

еще не произошло.

Это называется асинхронность.

anonymous
()

вот так

var projects;

$.get("/loadprojects", function(data) {
    projects = data;
    console.log(projects)
});

noomorph
()
Ответ на: комментарий от technobot

С промисом так (без обработки ошибок):

var projects;
var promise = new Promise(function(resolve) {
  $.get("/loadprojects", function(data) {
    projects = data;
    console.log('got data', data);
    resolve();
  });
});

promise.then(function() {
  console.log('projects =', projects);
});

SOmni ★★
()
Ответ на: комментарий от ixrws

Ок, пойду непонятные алгоритмы переписывать на ассемблере для ясности

Shadow ★★★★★
()
Ответ на: комментарий от theNamelessOne

https://api.jquery.com/jquery.get/

As of jQuery 1.5, all of jQuery's Ajax methods return a superset of the XMLHTTPRequest object. This jQuery XHR object, or «jqXHR,» returned by $.get() implements the Promise interface, giving it all the properties, methods, and behavior of a Promise (see Deferred object for more information).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.