Angular: Switch语句中的异步承诺
Angular: Asynchronous Promise in Switch Statement
有一个控制器:
app.controller('myController', function ($scope, myService) {
$scope.pageData = {};
myService.promiseGetDataFromServer()
.then(function (response) {
$scope.pageData = response.data;
}, function (reason) {
// error has occurred.. etc...
});
}
到目前为止一切正常。然而,我想基于一些确定性逻辑来填充$scope.pageData
。我试过了:
app.controller('myController', function ($scope, myService2, thing) {
$scope.pageData = {}
switch (thing)
{
case 'whatever':
myService2.promiseGetWhateverFromServer()
.then(function (response) {
$scope.pageData = response.data;
}, function (reason) {
// error has occurred.. etc...
});
break;
case 'something':
myService2.promiseGetSomethingFromServer()
.then(function (response) {
$scope.pageData = response.data;
}, function (reason) {
// error has occurred.. etc...
});
break;
}
}
没有服务器错误,我记录了响应,一切都很好,但是我的视图没有渲染,因为我怀疑$scope.pageData
的属性是未定义的。
我如何绕过这个?我希望视图在switch语句解决后加载
如果我没有弄错的话,您可以将逻辑与选择适当的服务和执行请求分开,如下所示:
app.controller('myController', function ($scope, myService2, thing) {
$scope.pageData = {};
//here we select service
$scope.getDataForPageData = function(parameter){
var serviceToSelect;
switch (parameter)
{
case 'whatever':
serviceToSelect = myService1;
break;
case 'another'
serviceToSelect = myService2;
break;
}
return serviceToSelect;
}
//do request and assign $scope.pageData when resolved
$scope.getDataForPageData(thing).promiseGetSomethingFromServer()
.then(function (response) {
$scope.pageData = response.data;
}, function (reason) {
// error has occurred.. etc...
});
}
相关文章:
- 为什么同步睡眠功能没有被承诺内异步化
- 如何按照承诺使用mocha/chai/chai测试ES7异步函数
- Node JS异步承诺.所有问题
- 将异步工作流更改为承诺(蓝鸟)
- JQuery 承诺异步对话
- WinJS,从可能是异步的函数返回一个承诺,也可能不是异步的
- 同步异步创建的承诺
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- 使我的异步代码与setTimeout同步.我需要承诺吗
- 异步角度承诺和变量初始化
- 如何在节点中使用承诺一次并行异步多个请求
- 使用链式 Q 承诺异步加载的局部变量
- JavaScript 异步编程:承诺与生成器
- Ember:解决复杂的异步承诺
- 异步承诺中未处理的承诺拒绝
- ES6异步承诺
- 非异步承诺回调
- 使用Bluebird进行异步承诺处理
- 异步承诺失败时首选throw或reject
- Angular: Switch语句中的异步承诺