Federick Jons Federick Jons - 6 days ago 5
AngularJS Question

Cannot return the promise correctly

I want to call a function in my service, the problem is that, after selected a valid date, I have to return a date.
the promise never called because I think I return in a wrong way. Can you help me to solve my problem?
This is the error:


TypeError: Cannot read property 'then' of undefined
at AgendaController.abrirAgenda


agenda.controller.js

function abrirAgenda() {
var fechaLimite = new Date(vm.agendaComplejo.anioHoy, vm.agendaComplejo.mesHoy - 1, vm.agendaComplejo.diaHoy);
fechaLimite.setDate(fechaLimite.getDate() + 30);
var fechaSeleccionada = new Date(vm.agendaComplejo.anioSeleccionado, vm.agendaComplejo.mesSeleccionado - 1, vm.agendaComplejo.diaSeleccionado);
agendaService.abrirAgenda(fechaSeleccionada, fechaLimite)
.then(prueba);
}

//prueba
function prueba(resultado){
debugger;
}


agenda.service.js

// abrir la agenda para cambiar de día / mes
function abrirAgenda(fechaSeleccionada, fechaLimite) {
debugger;
var ipObj1 = {
callback: function (val) { //Mandatory
var fecha = new Date(val);
var dia = fecha.getDate();
var mes = fecha.getMonth() + 1; //Se suma 1 porque el primer mez comienza en 0
var anio = fecha.getFullYear();
var fechaDeseada = anio + "-" + mes + "-" + dia;
return fechaDeseada;
},
inputDate: fechaSeleccionada,
//inputDate: new Date(),
titleLabel: 'Seleccione una fecha',
setLabel: 'Aceptar',
todayLabel: 'Hoy',
closeLabel: 'Cancelar',
mondayFirst: true,
from: new Date(2016, 2, 1),
to: fechaLimite,
weeksList: ["D", "L", "M", "MIE", "J", "V", "S"],
monthsList: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
templateType: 'popup',
showTodayButton: false,
dateFormat: 'dd MMMM yyyy',
closeOnSelect: false
};
ionicDatePicker.openDatePicker(ipObj1);
}


I need to return the selected date: "fechaDeseada". I'm trying to use this date picker:
Click Me

Thanks for helping!

Answer

Are you sure the framework uses promises? The examples don't show it.

I'd try using the callback object instead, like this:

agenda.controller.js

function abrirAgenda() {
    //...

    agendaService.abrirAgenda(fechaSeleccionada, fechaLimite, function(val){
            var fecha = new Date(val);
            var dia = fecha.getDate();
            var mes = fecha.getMonth() + 1; //Se suma 1 porque el primer mez comienza en 0
            var anio = fecha.getFullYear();
            var fechaDeseada = anio + "-" + mes + "-" + dia;            
            prueba(fechaDeseada)
    })
}

agenda.service.js

function abrirAgenda(fechaSeleccionada, fechaLimite, callback) {
    debugger;
    var ipObj1 = {
        callback: callback, 
        //...
    };
    ionicDatePicker.openDatePicker(ipObj1);
}
Comments