gpt4 book ai didi

javascript - AngularJS Ionic $q.all 不在工厂内执行

转载 作者:行者123 更新时间:2023-11-28 18:09:27 25 4
gpt4 key购买 nike

我在使用 $cordovaCalendar 插件时遇到这个问题。我可以成功使用这个 $cordovaCalendar 插件将事件添加到我的智能手机的 native 日历中,并且它对我有用,是的!现在的问题是,我想在渲染 View 时检查此类事件 E 是否已添加到 native 日历中。

我在网上找到了这段代码并尝试实现它。它适用于 addEvent,但在 getEvents 中则不起作用,因为 $q.all 未执行,并且我需要每个 promise 的结果,以便使 View 中的按钮取决于该事件是否已添加或未添加.

这是代码:

服务:

(function() {

'use strict';

angular
.module('app.services')
.factory('Events', EventsFunction);

function EventsFunction($q, $cordovaCalendar) {
var incrementDate = function(date, amount) {
var tmpDate = new Date(date);
tmpDate.setDate(tmpDate.getDate() + amount);
tmpDate.setHours(13);
tmpDate.setMinutes(0);
tmpDate.setSeconds(0);
tmpDate.setMilliseconds(0);

return tmpDate;
};

var incrementHour = function(date, amount) {
var tmpDate = new Date(date);
tmpDate.setHours(tmpDate.getHours() + amount);

return tmpDate;
};

var getEvents = function(events) {

var deferred = $q.defer();
var promises = [];

events.forEach(function(event) {

promises.push($cordovaCalendar.findEvent({
title: event.title,
startDate: event.start_time
}));
});

$q.all([promises]).then(function(results) {

for (var i = 0; i < results.length; i++) {

events[i].status = results[i].length === 1;
console.log(events[i]);
}

deferred.resolve(events);

});

return deferred.promise;
};

var addEvent = function(event) {

console.log(event);

var deferred = $q.defer();

$cordovaCalendar.createEvent({
title: event.title,
notes: event.ent_name,
startDate: event.start_time,
endDate: event.start_time

}).then(function(result) {
console.log('success');
console.dir(result);
deferred.resolve(1);

}, function(err) {
console.log('error');
console.dir(err);
deferred.resolve(0);
});

return deferred.promise;

};

return {
get: getEvents,
add: addEvent
};

}

})();

Controller :

  {
$http({
method: 'GET',
skipAuthorization: true, //es necesario enviar el token url: '', headers: ... })
.success(function (data) {


$scope.posts = data.message;
Events.get($scope.posts).then(function(events) {
console.log("events", events);
$scope.events = events;
});
console.log($scope.events);

});

$scope.addEventToCalendar = function(event) {
//console.log("In event add");
//Events.add(event);
}

}

HTML:

<button class="button button-clear button-small button-royal button-block" ng-if="!post.status" ng-click="addEventToCalendar(post)"><b>Add to Calendar</b></button>
<p ng-if="post.status">This event is added to your calendar already!</p>

最佳答案

我可能是错的,但行 $q.all([promises]).then(function(results) { 应该只是 $q.all(promises).then( function(results) { - 即 promises 已经是一个数组,因此无需将其包装在 [] 中。

关于javascript - AngularJS Ionic $q.all 不在工厂内执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937035/

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