angularjs – angular1.x中的$promise和$q promises有什么区别?
我开始使用angular中的promises来解析我的api调用,使用以下语法:
$scope.module = moduleFactory.get({id: $stateParams.id}) .$promise.then(function(response){ $scope.module = response; } 现在,我遇到了一种情况,我必须在for循环中链接多个promise,并在for循环中的所有promise都已解析后执行一些代码.我一直试图用$promise语法搜索如何做到这一点,但互联网上的大多数消息来源都在谈论$q.我是开发工作的新手,我发现在这两个概念($q和$promise)之间徘徊是非常困惑的.请你好心人:首先,向我解释$promise和$q之间的区别;第二,如果我决定使用$q来解决我上面描述的当前问题,是否意味着我将不得不重写使用$promise的代码,以使其可以像$q.all()那样进行链接? 解决方法
您可以通过调用$q来构造角度的承诺:
let promise = $q(function(resolve,reject) { ... }; 或者如果你只想要一个立即解决的承诺: let promise = $q.resolve(somevalue); 还有一种使用$q.defer()来构造延迟对象并返回它的.promise属性的旧方法,但你应该避免这样做,并认为它只是为了向后兼容. 创建新承诺的最终方法是在现有承诺上调用.then()(或.catch()). .$promise属性只是上述机制之一由$resource服务或遵循相同模式的东西创建的promise. 一旦你有了一些承诺,你就可以将它们全部填入数组并使用$q.all()等待它们全部完成,或者让它们拒绝.或者,如果您希望按顺序发生事情,可以通过执行前一个承诺的.then()中的每个步骤将它们链接在一起: let promise = $q.resolve(); for(... something ...) { promise = promise.then(() => { ... next step here ...}); } promise.then(() => { ... runs when everything completed ...}); 这将按顺序执行所有操作,而$q.all()将并行启动它们.有时你想要一个,有时候想要另一个: let promises = []; for(... something ...) { promises.push(somethingThatReturnsAPromise()); } $q.all(promises).then(() => { ... runs when everything completed ...}); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |