这可能是一个不起眼的问题,但我仍然无法理解承诺,特别是如何用它们编写代码。 (我已经阅读了几篇文章,但其中大多数都是抽象的,我只是写得太清楚,没有清晰的图片) 我有一个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
}
然而,我无法正确理解语法。
答案 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
});
回调。