2016-11-10 5 views
0

Ich habe eine Funktion auf klicken, für die ich sweetalert2 verwenden. Dies ist die Funktion:Javascript - Uncaught (in Versprechen)

publish = function (article) { 
    swal({ 
     title: "Skal du publisere?", 
     text: null, 
     type: "info", 
     showCancelButton: true, 
     cancelButtonText: "Avbyrt", 
     cancelButtonColor: '#FFF', 
     confirmButtonColor: "#2E112D", 
     confirmButtonText: "Ja, publisere" 
    }).then(function(){ 
     var articleId = $(article).val(); 
     $.post("/admin/articles/publish/article", { 
      '_token' : $('meta[name="csrf-token"]').attr('content'), 
      'articleId': articleId 
     }).done(function(){ 
      $(article).hide(); 
      return swal({ 
       type: 'success', 
       title: 'Du har publisert den artikkel.', 
       showConfirmButton: false, 
       timer: 1000 
      }); 
     }).fail(function() { 
      return swal({ 
      type: 'warning', 
      title: 'Noeting gikk feil, prov igjen', 
      showConfirmButton: false, 
      timer: 1000 
      }); 
     }); 
    }, function(dismiss) { 
    // dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer' 
     if (dismiss === 'cancel') { // you might also handle 'close' or 'timer' if you used those 
     // ignore 
     } else { 
     throw dismiss; 
     } 
    }) 
} 

Alles funktioniert gut, aber ich erhalte eine Fehlermeldung für den Timer:

sweetalert2.min.js: 1 Uncaught (in Versprechen) Timer

Wie kann ich das vermeiden, was mache ich falsch?

Antwort

0

Das Problem ist, dass Sie in der Regel nie eine Funktion aufrufen sollten, die ein Versprechen zurückgibt, ohne etwas mit diesem Versprechen zu tun. In diesem Fall sind die Versprechen zurückgebenden Funktionen swal und $.post. Wenn Sie das zurückgegebene Versprechen ignorieren, warten Sie nicht darauf, dass es abgeschlossen wird. Ihre then Handler kann ein Versprechen geben die Versprechen Kette, so weitermachen:

publish = function (article) { 
    return swal({ 
     title: "Skal du publisere?", 
     text: null, 
     type: "info", 
     showCancelButton: true, 
     cancelButtonText: "Avbyrt", 
     cancelButtonColor: '#FFF', 
     confirmButtonColor: "#2E112D", 
     confirmButtonText: "Ja, publisere" 
    }).then(function(){ 
     $(article).hide(); 
     var articleId = $(article).val(); 
     return $.post("/admin/articles/publish/article", { 
      '_token' : $('meta[name="csrf-token"]').attr('content'), 
      'articleId': articleId 
     }).then(function(){ 
      return swal({ 
       type: 'success', 
       title: 'Du har publisert den artikkel.', 
       showConfirmButton: false, 
       timer: 1000 
      }).catch(function(timeout) { }); 
     }); 
    }, function(dismiss) { 
    // dismiss can be 'overlay', 'cancel', 'close', 'esc', 'timer' 
     if (dismiss === 'cancel') { // you might also handle 'close' or 'timer' if you used those 
     // ignore 
     } else { 
     throw dismiss; 
     } 
    }) 
    .catch(function(err) { 
     console.error(err); 
     throw err; 
    }) 
} 
+0

Ich habe meinen Code mit Ihrem Vorschlag bearbeitet, aber ich bekomme immer noch den gleichen Fehler – Leff

+0

Siehe meine Bearbeitung, um einen Diagnose-Handler am Ende hinzuzufügen. – JohnLock

+0

Möglicherweise müssen Sie nur die Ablehnung des Warnversprechens "Erfolg" ignorieren. Siehe meine Bearbeitung. – JohnLock

0

Sie benötigen einen Ablehnungs Handler Promise hinzuzufügen. Alternativ können Sie .catch(swal.noop) als eine schnelle Art und Weise verwenden, um einfach die Fehler unterdrücken:

swal('...') 
    .catch(swal.noop); 

Dieses Problem wird in der Paketdokumentation erwähnt wird: https://github.com/limonte/sweetalert2#handling-dismissals

Außerdem gibt es die geschlossene Frage über das Thema: limonte/sweetalert2#221

Verwandte Themen