目前,我在等待我的承諾傳遞給解決方案時遇到問題。 據我所知,這是因爲它是一個異步調用,所以決心不會等待所有的承諾,只是傳遞我的部分數據來解決。Angularjs ui-router解決方案不會等待所有承諾
我試過尋找很多的論壇,但我似乎無法得到它的工作。
所以這裏是我的主頁。
angular.module('app')
.component('home', {
templateUrl: 'Content/app/components/home.html',
bindings: {},
controller: ['$http', '$state', 'test',
function ($http, $state, test) {
var vm = this;
vm.userName;
vm.searchReddit = function() {
$http.get('https://www.reddit.com/user/' + vm.userName + '/about.json')
.then(function (response) {
vm.accountData = response.data.data;
vm.accountData.total_karma = vm.accountData.comment_karma + vm.accountData.link_karma;
$state.go('redditAnalyzer', { name: vm.userName });
});
}
}
]
});
一旦我輸入我的用戶名,它會改變狀態。 在我app.js我有
angular.module('app', ['ui.router', 'chart.js'])
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('redditAnalyzer', {
url: '/analyze/:name',
component: 'redditAnalyzer',
resolve: {
resolve:
['test', '$stateParams', function (test, $stateParams) {
var data = test.getAnalysisData($stateParams.name);
return data;
}
]
}
})
.state('home', {
url: '/',
component: 'home'
});
}]);
我打電話的功能test.getAnalysisData來獲取數據。
,在我test.js我有
angular.module('app')
.factory('test', ['$http', '$state', '$q', function ($http, $state, $q) {
var vm = this;
vm.accountData = {};
vm.after = '';
vm.bestComment = {};
vm.bestComment.karma = 0;
vm.userName;
vm.bestComment.date = '';
vm.subreddit = {};
vm.myChart;
vm.getAnalysisData = function (redditUser) {
vm.userName = redditUser;
vm.resetData(redditUser);
vm.getAccountInfo(redditUser);
vm.getAllComments(redditUser);
return {
accountData: vm.accountData,
bestComment: vm.bestComment,
userName: vm.userName,
subreddit: vm.subreddit,
myChart: vm.myChart
};
}
vm.resetData = function (user) {
vm.accountData = {};
vm.after = '';
vm.bestComment = {};
vm.bestComment.karma = -(Math.pow(2, 53) - 1);
vm.userName = user;
vm.date = '';
vm.subreddit = [];
vm.topThreeSub = [];
}
vm.getAccountInfo = function (user) {
$http.get('https://www.reddit.com/user/' + user + '/about.json')
.then(function (response) {
vm.accountData = response.data.data;
vm.accountData.total_karma = vm.accountData.comment_karma + vm.accountData.link_karma;
console.log("I got the account info!");
});
}
vm.getAllComments = function (user) {
$http.get('https://www.reddit.com/user/' + user + '/comments.json' + vm.after)
.then(
function (response) {
console.log("I got the comment info!");
tempResponse = response;
var data = response.data.data
vm.after = '?after=' + data.after;
for (i = 0; i < data.children.length; i++) {
if (vm.bestComment.karma < parseInt(data.children[i].data.score)) {
vm.bestComment.karma = parseInt(data.children[i].data.score);
vm.bestComment.comment = data.children[i].data.body;
vm.bestComment.date = (new Date(data.children[i].data.created * 1000)).toString();
}
var tempSub = data.children[i].data.subreddit;
if (vm.subreddit[tempSub] === undefined) {
vm.subreddit[tempSub] = 1;
}
else {
vm.subreddit[tempSub]++;
}
}
if (response.data.data.after != null) {
vm.getAllComments(user);
}
}, function (error) {
console.log(error);
throw error;
})
.catch(function (error) { });
}
return {
resolve: vm.resolve,
hello: vm.hello,
getAnalysisData: vm.getAnalysisData
}
}]);
我遞歸調用函數vm.getAllComments,因爲它的工作原理是vm.getAllComments將獲得該帳戶的第25層的意見,然後再從部分來自回覆的信息,我可以在賬戶中獲得接下來的25條評論。
終於,在我的redditanalyzer文件,我有
angular.module('app')
.component('redditAnalyzer', {
templateUrl: 'Content/app/components/redditAnalyzer.html',
bindings: {
resolve: '<'
},
controller: ['$http', 'test',
function ($http, test) {
var vm = this;
vm.accountData = {};
vm.bestComment = {};
vm.bestComment.karma = 0;
vm.userName;
vm.bestComment.date = '';
vm.subreddit = {};
vm.myChart;
vm.$onInit = function() {
console.log("this is the resolve", vm.resolve);
//vm.accountData = resolve.accountData;
//vm.bestComment = resolve.bestComment;
//vm.myChart = resolve.myChart;
//vm.subreddit = resolve.subreddit;
//vm.userName = resolve.userName;
}
}]
});
而且你可以看到在我的控制檯中的問題。
this is the resolve {accountData: {…}, bestComment: {…}, userName: "spez", subreddit: Array(0), myChart: undefined}accountData: {}bestComment: {karma: 22200, comment: "Reddit search might work by then.", date: "Thu Oct 27 2016 01:07:22 GMT-0400 (Eastern Daylight Time)"}myChart: undefinedsubreddit: [blog: 10, announcements: 475, modnews: 34, programming: 32, ModSupport: 20, …]userName: "spez"__proto__: Object
test.js:44 I got the account info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
test.js:51 I got the comment info!
7test.js:51 I got the comment info!
即使在承諾之前,它也會更改路線。 我應該如何等待我的所有承諾?
解析器不會等待的承諾,因爲代碼不返回對解決方案的承諾。 – georgeawg