gpt4 book ai didi

javascript - 如何在 Angular 的工厂方法中返回数据?

转载 作者:行者123 更新时间:2023-11-30 17:12:47 25 4
gpt4 key购买 nike

我是一个 ionic/Angular n00b,我不知道如何做到这一点。

我有一个这样定义的工厂:

angular.module('starter.services', [])

.factory('Calendars', function () {

var calendars;
var success = function(message) {
calendars = message;
return calendars;
};
var error = function(message) {alert("Error: " + message)};

window.plugins.calendar.listCalendars(success,error);

return {
all: function() {
return calendars;
},
get: function(calendarId) {
return calendars[calendarId];
}
}


});

我正在尝试像这样在我的 Controller 中检索日历:

.controller('CalendarsCtrl', function($scope,Calendars) {

$scope.calendars = Calendars.all();

})

正在调用工厂方法,但在调用“成功”回调之前结果不可用,因此 CalendarsCtrl 始终未定义。

如何解决?

编辑 - 我已经更正了 Controller 中的调用。但同样的问题仍然存在,该函数在成功回调之前不会返回结果。

最佳答案

你将不得不使用一个 promise 。

先添加依赖$q

.factory('Calendars', function ($q) {

然后在 all() 中你这样做

all: function() {
var deferred = $q.defer();

window.plugins.calendar.listCalendars(function(data) {
deferred.resolve(data);
}
,function(error) {
deferred.reject(error); // something went wrong here
});
return deferred.promise;

现在这将使返回之后数据已被解析(不再是未定义的)。

最后一件事,现在当您从 Controller 取回数据时,您可以执行此操作

var promise = Calendars.all();
promise.then(function(data) {
console.log('Success: you can use your calendar data now');
}, function(error) {
console.log('Failed for some reason:' + error);
});

您可以在这里阅读更多关于 promise 的信息:https://docs.angularjs.org/api/ng/service/ $q

我知道第一次很难掌握。

关于javascript - 如何在 Angular 的工厂方法中返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com