AngularJS如何在解析承诺后才执行代码? (使用Restangular)

时间:2015-05-29 12:17:06

标签: angularjs promise restangular

这可能是一个不起眼的问题,但我仍然无法理解承诺,特别是如何用它们编写代码。 (我已经阅读了几篇文章,但其中大多数都是抽象的,我只是写得太清楚,没有清晰的图片) 我有一个AngujlarJS应用程序,它通过http请求获取数据到另一个发送承诺的服务器。我已经能够从承诺中检索响应并在我的应用中使用它。但是因为我的代码编写得很糟糕。它在解决promise之前执行其他代码,从而导致出现问题。它在有数据之前开始加载页面。

我拥有的是:

var userTotals = *http request which returns a promise

$scope.data = userTotals.$object

//code that does someting with $scope.data

我需要的是(我认为)

var userTotals = *http request which returns a promise

$scope.data = userTotals.$object.
  beforethisresolves(function{ 
     show fancy loading icon or something })
  .whenthis resolves(function{
    //code that does someting with $scope.data
  }

然而,我无法正确理解语法。

3 个答案:

答案 0 :(得分:2)

这就是它的一般情况:

var promise = $http.post('/url');

console.log('Request started');

promise.then(function(result) {
  console.log('Success');
  console.log(result);
}, function() {
  console.log('Failure');
});

事实上,$q AngularJS documentation帮助我了解了承诺概念。

希望这有帮助!

答案 1 :(得分:0)

var successCallback = function(){//...};
var errorCallback = function(){//...};

$http
 .post('url', data)
 .success(successCallback)
 .error(errorCallback);

//OR

$http
 .post('url', data)
 .then(successCallback, errorCallback);

答案 2 :(得分:0)

假设您正在使用Bootstrap模式,您可以执行以下操作:

error: error adding symbols: DSO missing from command line /usr/local/lib/libopencv_core.so.3.3:
error: collect2: error: ld returned 1 exit status

传递给此函数的function openModalWithProgressIndicator(deferred) { const progressModal = $uibModal.open({ templateUrl: 'templates/modals/progress.html', backdrop: 'static' }); return deferred.then(function (value) { return value; }).finally(function () { progressModal.close(); }); } 参数是一个承诺。那说你现在可以做到以下几点:

deferred

所以要注意的要点是始终执行的const deferred = $http.post('http://somewhere/data', {foo: 'bar'}); openModalWithProgressIndicator(deferred) .then(function (httpResponse) { // do sth with httpResponse.data }).catch(function (error) { // do sth with error }); 回调。