Подтвердить что ты не робот

Получите данные из обещания вместо того, чтобы вернуть обещание

Мне очень жаль, если другие обетонные темы ответили на это, но, глядя на некоторые из них, я просто не получаю ответ, чтобы решить мою проблему. У меня есть три json файла, которые я хочу захватить, проанализировать и вручную слить. Проблема в том, что я застрял в тюрьме с обещаниями. Позвольте мне показать вам некоторые из кода моего контроллера angularjs.

$scope.tests = [];

$scope.tests = $http.get('results/testResults.json').then(function(res) {
  return res;
});

console.dir($scope.tests);

Из console.dir я получаю обещание, но на что я надеялся, были данные из переменной res. Должен быть какой-то способ получить эти данные. Нет ли способа получить эти данные из обещания глобальной переменной, чтобы другие функции promises могли использовать эти данные? Спасибо

4b9b3361

Ответ 1

Обещание завершается в будущем. Вы проверяете переменную обещания до того, как данные будут в обещании. Вы должны оставаться в цепочке обещаний, чтобы использовать ваши данные. Вне цепочки обещаний вы не знаете время асинхронных событий (почему вы используете promises в первую очередь).

Если вы действительно не хотите использовать данные прямо в своем первом обработчике .then(), который является идеальным местом для его использования, вы можете связать еще один .then() с обещанием:

$scope.tests = $http.get('results/testResults.json');

$scope.tests.then(function(data) {
   // can use data here
});

FYI, promises не заполняют данные глобальными переменными. Они позволяют использовать данные в обратных вызовах .then() при вызове этих обратных вызовов.

Ответ 2

Составьте свойство и вставьте его на объект окна, например,

window.myProperty

Затем передайте свои данные, изнутри обещания, например,

window.myProperty = данные;

И поднимите его, когда вы вернетесь на улицу, вот так:

myVariable = window.myProperty;

Или наоборот, потому что я не могу получить данные в или из некоторого Promises, так что это будет выглядеть так:

Снова создайте свойство и вставьте его в объект окна, например,

window.myProperty

Затем передайте свои данные, со стороны обещания, как это,

window.myProperty = данные;

И заберите его, когда вы находитесь внутри, как это,

myVariable = window.myProperty;

Это не лучший способ сделать это! Кто-нибудь знает лучший способ?