RVa*_*een 1 nested resolve promise angularjs angular-ui-router
我一直在努力解决以下问题:
我希望在视图显示之前得到一些数据,(解析).但是有些数据取决于另一个承诺的结果.
它是这样的:我从$ stateParams获取作业ID(索引)并在我的服务中查找数据.一旦完成,从这个结果(作业),我可以查找设置和楼层(每个来自不同的服务),都返回一个承诺.
我到目前为止所得到的
jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {
var defer = $q.defer();
Jobs.getByIndex($stateParams.index)
.then(function(job) {
console.log('got jobs');
$q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
.then(function(info) {
console.log('got info');
defer.resolve([job, info.floors, info.settings]);
});
});
return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)
拿2
jobinfo: function(Jobs, Floor, JobSetting, $stateParams, $q) {
return Jobs.getByIndex($stateParams.index)
.then(function(job) {
console.log('got jobs');
return $q.all({floors: Floor.getByJob(job), settings: JobSetting.getByJob(job)})
.then(function(info) {
console.log('got info');
return [job, info.floors, info.settings];
});
});
}
Run Code Online (Sandbox Code Playgroud)
两者似乎都失败了,我甚至都没有console.log回来.
PS:我把剩下的代码留了出来,显然它们被包裹了
resolve: {
...
}
Run Code Online (Sandbox Code Playgroud)
并在正确的地方定义.
有人可以如此温柔地指出我正确的方向吗?
我最终得到的解决方案如下:(感谢avcajaraville)
job: function(Jobs, $stateParams) {
return Jobs.getByIndex($stateParams.index);
},
floors: function(Floor, job) {
return Floor.getByJob(job);
},
settings: function(JobSetting, job) {
return JobSetting.getByJob(job);
}
Run Code Online (Sandbox Code Playgroud)
我喜欢将解析器分开.
您可以通过以下方式为每个解析器注入值:
job : function( Jobs, $stateParams, $q ) {
var defer = $q.defer();
Jobs.getByIndex( $stateParams.index, function( job ) {
defer.resolve( job );
});
return defer.promise;
},
floor : function( Floor, job, $q ) {
var defer = $q.defer();
Floor.getByJob( job, function( floor ) {
defer.resolve( floor );
});
return defer.promise;
},
settings : function( JobSetting, job, $q ) {
var defer = $q.defer();
JobSetting.getByJob( job, function( settings ) {
defer.resolve( settings );
});
return defer.promise;
},
Run Code Online (Sandbox Code Playgroud)
resolve属性是一个map对象.map对象包含键/值对
- key - {string}:要注入控制器的依赖项的名称.
- factory - {string | function}:
[...]
如果是function,则将其注入,并将返回值视为依赖项.如果结果是promise,则在实例化控制器并将其值注入控制器之前解析.
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |