角 - 如何从承诺
问题描述:
我得到我的应用程序对象通过调用像这样的服务功能访问对象:角 - 如何从承诺
$scope.quiz= QuizService.fetch($stateParams.quiz).$promise.then(function(result) {
return result;
当我做console.log($scope.quiz)
我得到这个:
Promise {$$state: Object}
$$state:Object
status:1
value:m
$promise:Promise
$resolved:true
active_question_id:1275
code:7690
id:200
mode:"multiplayer"
players:Array[2]
questionCount:7
question_time:10000
status:"active"
subjects:Array[0]
token:"i2L6OLEfAqfD3tLUCMzx"
topics:Array[0]
years:Array[1]
__proto__:Object
__proto__:Object
__proto__:Object
我想通过他们来访问object properties years, subjects and topic
和循环,但是当我做console.log($scope.quiz.years)
我得到
不确定
服务看起来是这样的:
fetch: function(id) {
var result = quizResource.get({id: id});
result.$promise.then(function(quiz) {
service.setCurrent(quiz); });
return result;
},
而且quizResource在QuizService看起来是这样的:
var quizResource = $resource(
AppSettings.apiUrl + '/quizzes/:id/:verb',
{
id: '@id'
},
答
本质上讲,你使用promises
和resolve
或callback
需要产业链的功能。你应该使用promise重构你的两个函数fetch
和resourceGetter
。您可以使用我在下面提供的模式(Take a look here),使用$q
提供程序和许多其他变体。
你应该建立自己的QuizService
像
(function() {
'use strict';
angular
.module('myApp')
.service('QuizService', function ($resource, AppSettings) {
function resourceGetter() {
return new Promise(function (resolve) {
return resolve ($resource(
AppSettings.apiUrl + '/quizzes/:id/:verb',
{
id: '@id'
}
});
})
}
function fetchAndSet(params) {
return new Promise(function (resolve, reject) {
resourceGetter().then(function(response){
if(response){
return Promise.resolve(setCurrent(response));
}
return reject({error : 'Error while fetch'});
})
})
}
return {
fetchAndSet: fetchAndSet
}
});
})();
,然后在你的modules
,可以说一个Controller
. . .
QuizService.fetchAndSet(parameter).then(function(result){
if(result.error){
console.log('Error ':result.error);
}
console.log('Got '+result+' from fetch');
});
当然,你也可以重构setCurrent
遵循这种模式。
此代码不能保证100%正常工作,因为我不确定你正在尝试做什么,而且你没有提供Plunker或类似的东西。
我敢肯定,如果你看看我的代码和我提供的链接,你就可以使它工作。
希望我一直有帮助。
答
我认为,问题在于你设置
$scope.quiz= QuizService.fetch($stateParams.quiz).$promise.then(function(result) {
return result;
把回调内部的分配,而不是,所以你不变量设置为诺如:
QuizService.fetch($stateParams.quiz).$promise.then(function(result) {
$scope.quiz = result;});
您不能返回来自承诺'.then'的值。它的异步和调用代码在调用promise后返回。 – ste2425
也发布了'quizResource.get()'代码。 – AndreaM16