用Angularjs返回两个承诺,How To Chain So UI有$scope
Returning Two Promises With Angularjs, How To Chain So UI Has $scope
我的UI崩溃了,因为我的第二个承诺在第一个承诺中有一个依赖项,解决得不够快。因此,我接受了第二个承诺,并将其嵌套在第一个承诺中,如下所示:
csRepo.getSet(setID).then(
function (val) {
$scope.dataSet= val;
csRepo.getInfoInSet(setID).then(
function (val) {
$scope.dataSet.InfoOfSet = val;
$scope.$apply();
})
.catch(function (reason) {
throw "getInfoSet:" + reason;
});
$scope.$apply();
})
.catch(function (reason) {
throw "getSet() :" + reason;
});
这确实起到了作用,但我相信最好的做法是将两者"然后"联系在一起。这是真的吗?如果是的话,有人能重构我的代码样本来展示这一点吗?谢谢
在您的示例中,您可以独立调用这两个方法,因为setID
可以从函数调用的闭包中获得,但如果您只想在csRepo.getSet
之后调用csRepo.getInfoInSet
,您可以这样做:
csRepo.getSet(setID).then(
function (val) {
$scope.dataSet= val;
return setID;
})
.then(csRepo.getInfoInSet)
.then(function (val) {
$scope.dataSet.InfoOfSet = val;
})
.catch(function (reason) {
throw reason;
})
您不需要每次都调用$scope.$apply
,因为它也会影响性能。您可以使用$q.all
并行调用这两个方法并组合promise。请参阅:https://docs.angularjs.org/api/ng/service/$q
相关文章:
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- jQuery AJAX write to XML
- grep in JQuery to C#
- how to convert html <div> to pdf
- Node.js - POST to iFrame?
- SVG xml to image
- Advantages to DOMParser vs template & innerHTML
- how to split a string with ','
- How to declare a Map containing certain properties with flow
- Php variable obj to js
- 如何在submit to sightly时将表单输入值作为参数传递给WCMUsePojo
- D3JS selectAll to append rect
- Javascript connect to websocket
- Underscore each to update collection
- 在哪里可以找到R-to-JavaScript编译器
- SCEditor BBcode to HTML parsing
- Javascript RegEx to XML Schema RegEx
- How to apply javascript on <asp:Buttonfield>?
- PHP Vars to JavaScript Laravel 5.2
- 用Angularjs返回两个承诺,How To Chain So UI有$scope