Я создал веб-приложение, используя шаблон Hot Towel Angular, и хочу добавить сервисную функцию в «контекст данных».
Код:
(function () {
'use strict';
var serviceId = 'datacontext';
angular.module('app').factory(serviceId, ['common', '$http', datacontext]);
function datacontext(common, $http) {
var $q = common.$q;
var service = {
getFunctions: getFunctions
};
return service;
function getFunctions() {
var f = [];
$http({
method: 'GET',
url: 'https://api.github.com/users/google/repos',
contentType: 'application/json; charset=utf-8'
})
.success(function (data, status, headers, config) {
f = data;
console.log('f=*' + f + '*');
})
.error(function (data, status, headers, config) {
alert('error!');
});
return $q.when(f);
}
}
})();
Я вижу, что консоль показывает некоторые объекты:
f=*[object Object],[object Object],[object O...
Но при использовании этого в моем файле functionController.js:
function getFunctions() {
return datacontext.getFunctions().then(function (data) {
console.log('data=*' + data + '*');
return vm.functions = data;
});
}
Для данных задано значение undefined.
Я что-то упустил, помогите определить ошибку.
$q.when(f)
просто оборачивает пустой массив[]
, который является текущим значениемf
при выполнении возврата, в обещание. Затем это обещание немедленно разрешается с этим значением, т. Е. Ваш тогда-обратный вызов вызывается с data=[]. - person Miichi   schedule 04.01.2014