Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/03/2017, 19:21
Triby2
 
Fecha de Ingreso: julio-2014
Mensajes: 334
Antigüedad: 10 años, 4 meses
Puntos: 30
función retorna undefined

Saludos, os comparto el código y os comento dentro del código (ver los comentarios dentro del javascript)

Código Javascript:
Ver original
  1. var FinalDocument = function () {
  2.     'use strict';
  3.  
  4.     var OrderID = '';
  5.     var hasInvoice = false;
  6.  
  7.     var initReportFinal = function() {
  8.         OrderID = $('#master-order').val();
  9.         var url = '/orders/has-invoice/' + OrderID;
  10.         var url2 = '/documents/final-document/' + OrderID;
  11.         var url3 = '/documents/preview/' + OrderID;
  12.  
  13.         $('body').on('click', '.subgroups.viewFR', function (event) {
  14.              // Aquí me está devolviendo "undefined"
  15.              hasInvoice = checkIfInvoiceExist(url);
  16.  
  17.              if(hasInvoice) {
  18.                  $.ajax({
  19.                      url: url2,
  20.                      beforeSend: function () {
  21.                          $('.ring-label').text('Generating');
  22.                          $('.bottom-ring-label').css('display', 'block');
  23.                      },
  24.                      complete: function () {
  25.                          $('.bottom-ring-label').css('display', 'none');
  26.                      },
  27.                      success: function(data) {
  28.                          window.open(url3, '_blank');
  29.                      }
  30.                  });
  31.              } else
  32.                  swal("There's no any invoice generated, so you cannot generate the final document.", "Lien Application", "warning");
  33.         });
  34.  
  35.         function checkIfInvoiceExist(url) {
  36.             $.ajax({
  37.                 url: url,
  38.                 beforeSend: function () {
  39.                     $('.ring-label').text('Processing');
  40.                     $('.bottom-ring-label').css('display', 'block');
  41.                 },
  42.                 complete: function () {
  43.                     $('.bottom-ring-label').css('display', 'none');
  44.                 },
  45.                 success: function (data) {
  46.                     // Hasta aquí se recibe el resultado de la consulta "true o false"
  47.                     console.info('HasInvoice? ' + data.success);
  48.                     return data.success;
  49.                 }
  50.             });
  51.         }
  52.     }
  53.  
  54.     return {
  55.         init: function () {
  56.             initChecklistBTN();
  57.             initInvoicePreview();
  58.             initReportFinal();
  59.         }
  60.     };
  61.  
  62. }();

He tratado también aunque sea absurdo, sacar fuera del la clase la función checkIfInvoiceExist() pero nada, como era de esperar, el resultado sigue siendo igual.

Me estoy viendo obligado a seguir ejecutando el código dentro de la misma función pero no me interesa pues hay otras funciones que hace uso de la función checkIfInvoiceExist() y dependiendo del resultado hace otras cosas.

Algúna explicación / solución a porqué no me está devolviendo el resultado a la variable cuando sí debería de hacerlo.