Я эта услуга, она возвращает список студентов асинхронно с помощью обратного вызова:Как правильно использовать обещание с функцией обратного вызова
studentModule.factory('StudentService', function (DB_URL) {
return {
getAllStudents: function (callback) {
var Datastore = require('nedb'),
path = require('path');
db = {};
db.students = new Datastore({
filename: DB_URL + '/students.db',
autoload: true
});
db.students.find({}, function (err, stds) {
callback(stds);
});
}; //end return
Моего старого способ, чтобы использовать его в контроллере:
StudentService.getAllStudents(function(sts) {
$scope.students = sts;
$scope.$apply();//notify angular about the change
});
Это работает для меня, но теперь я хочу использовать некоторые лучшие практики. Мне нужно, чтобы решить результат в пути до прихода к контроллеру, вот что я сделал:
.state('payment', {
url: '/payment',
templateUrl: 'frontend/components/payment/views/payment.html',
controller: 'PaymentController',
resolve: {
students: function (StudentService, $q) {
var defer = $q.defer();
defer.promise.then(function() {
StudentService.getAllStudents(function (sts) {
alert(JSON.stringify(sts));
return sts;
});
})
defer.resolve();
}
}
})
Оповещение возвращает данные из маршрута успешно, но не от контроллера - я получаю неопределенную в контроллер:
paymentModule.controller('PaymentController', function($scope,students) {
alert(JSON.stringify(students));
Любая помощь будет оценена!
Вы не вернули обещание решить вашу проблему. –
Вы также не решили свое обещание с данными, вы решили его ни с чем. –
Спасибо, я проверю это, я новичок в обещаниях, пожалуйста, несите меня. Вы также можете ответить на вопрос, пока я проверяю свой код. –