Javascript 函数中的承诺,angularjs
如果可能的话,如何将承诺实现到函数中,这样我就可以摆脱超时?我从工厂“Prim”中获得一些数据,函数看起来像:Javascript 函数中的承诺,angularjs,javascript,angularjs,promise,Javascript,Angularjs,Promise,如果可能的话,如何将承诺实现到函数中,这样我就可以摆脱超时?我从工厂“Prim”中获得一些数据,函数看起来像: $scope.getPre = function(id){ var url = WEB_API.MainUrl + '/api/prim/' + id +'/' + $window.sessionStorage.getItem('idsom'); Prim.getprim(function(data) { $scope.prim1 = data;
$scope.getPre = function(id){
var url = WEB_API.MainUrl + '/api/prim/' + id +'/' + $window.sessionStorage.getItem('idsom');
Prim.getprim(function(data) {
$scope.prim1 = data;
$scope.prim = $scope.prim1[0];
}, url);
$scope.$apply();
}
我想消除的超时:
setTimeout(function() { // it can't work without timeout
$scope.getPre($routeParams.idprim);
}, 100);
您的函数应该返回一个承诺,这样您就可以在其上使用
.then()
:
$scope.getPre = function(id){
var deferred = $q.defer()
var url = WEB_API.MainUrl + '/api/prim/' + id +'/' + $window.sessionStorage.getItem('idsom');
Prim.getprim(function(data)
$scope.prim1 = data;
$scope.prim = $scope.prim1[0];
deferred.resolve();
}, url);
return deferred.promise;
}
然后像这样使用它:
$scope.getPre($routeParams.idprim).then(function () {
// Do whatever you did after setTimeout
});
使用回调,这将是干净的选择是承诺,在项目中有更多的超时,我必须改变承诺,如果我使用回调,它将是不可读和更复杂的
var promise=newpromise((res,rej)=>{foo(/*callback*/res);})
wherefoo
是您需要等待的异步对象,它接受回调,然后在代码中的其他地方设置超时,而不是执行promise代码>这里的重点不是承诺/回调/什么,重点是同步与异步。为什么要依赖超时?当您直接调用getPre时,什么失败了?