данные об успехе angularjs $http.jsonp получают к нему доступ в другом месте

Как я могу получить доступ к $scope или данным, полученным в результате успеха в $http, вне запроса $http.jsonp()?

$http.jsonp('http://example.com/?callback=JSON_CALLBACK')
    .success(function(data) {
        $scope.info1 = data.name;
        $scope.info2 = data.company;
    });

console.log("access it here outside: ",$scope.info1);

в настоящее время консоль печатает undefined.

Спасибо за помощь.


person passion    schedule 29.01.2017    source источник


Ответы (1)


Вы не должны рассматривать асинхронный вызов ajax как синхронную работу. Вам нужно дождаться завершения этого ajax/обещания. Хотя не используйте .success/.error, они устарели, вместо этого используйте .then для цепочки обещаний.

Вы должны полагаться на обещание, чтобы обещание получило resolve/reject.

Код

var promise = $http.jsonp('http://example.com/?callback=JSON_CALLBACK')
promise.then(function(response) {
    var data = response.data;
    $scope.info1 = data.name;
    $scope.info2 = data.company;
    console.log("access it here outside: ",$scope.info1);
    myOtherFunction($scope.info1);
})
.catch(function(error) {
    console.log(error);
});
person Pankaj Parkar    schedule 29.01.2017
comment
что я должен использовать вместо успеха? не могли бы вы предоставить альтернативный способ? Благодарность - person passion; 29.01.2017
comment
все равно не печатается! я получаю неопределенность. - person passion; 29.01.2017
comment
ваш журнал консоли все еще находится ВНУТРИ then, я имею в виду полностью вне кода, связанного с thenи $http, я хочу использовать его в другой функции в том же контроллере. - person passion; 29.01.2017
comment
Вы можете вызвать эту другую зависимую функцию из .then текущего вызова jsonp - person Pankaj Parkar; 29.01.2017
comment
не могли бы вы привести пример? - person passion; 29.01.2017
comment
Какой пример вам нужен? - person Pankaj Parkar; 29.01.2017
comment
я хочу использовать $scope.info1 в другой функции в другом месте контроллера. - person passion; 29.01.2017