2016-07-08 13 views
6

Ich versuche derzeit, meine eigene Versprechen innerhalb Angular 2 verwendet werden. Wenn ich reject das Versprechen, ich werde eine Error: Uncaught (in promise): nope(…), aber nur auf die erste Versprechen, um abgelehnt werden .Unbehandelte Versprechen Ablehnung bei der Ablehnung Versprechen in Angular 2

Es ist Angular 2.0.0-rc.4, aber ich bemerkte dies in anderen Verhaltensweisen. Meine Frage ist, ist dies ein Fehler in meinem Verständnis von Versprechen, oder ist das ein Fehler, der dem Angular-Projekt gemeldet werden sollte?

Beispielcode:

import {Component} from '@angular/core'; 
import {bootstrap} from '@angular/platform-browser-dynamic' 
@Component({ 
    template: "TestComponent" 
}) 
class TestComponent { 
} 
bootstrap(TestComponent, []); 

let p = new Promise((resolve, reject) => { 
    console.log("create promise"); 
    reject("nope"); 
}); 
console.log("setting up"); 
p.then(r => console.log("then: " + r)); 
p.catch(e => console.log("reject: " + e)); 
console.log("setup done"); 

Console (Google Chrome 51.0.2704.106, 64 Linux Bit):

create promise 
setting up 
setup done 
reject: nope 
Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode. 
Unhandled Promise rejection: nope ; Zone: <root> ; Task: Promise.then ; Value: nope 
Error: Uncaught (in promise): nope(…) 
+1

verwenden Sie es6 Versprechen oder Sie haben Ihre eigene Implementierung? – Kliment

+0

Die Implementierung ist 'ZoneAwarePromise' von' zone.js', soweit ich das beurteilen kann. Deshalb denke ich, dass es mit Angular verwandt ist. –

+0

Der Titel ist irgendwie irreführend. "die Umsetzung eigener Versprechen in Angular 2" legt eindeutig nahe, dass es eine Homebrew Promise-Implementierung gibt. – estus

Antwort

9

Es

sein sollte
p 
.then(r => console.log("then: " + r)) 
.catch(e => console.log("reject: " + e)); 

p.then(...) allein erzeugt unbehandelte Kette, das stört Zone.js. Wenn Sie Bluebirds "unbehandelte Ablehnungen" behandelt haben, kennen Sie vielleicht bereits die Regeln.

+0

Danke, ich fand gerade heraus, wenn es "klick" in meinem Gehirn machte, wenn ich darüber nachdachte, warum die Lösung von Thierry Templier hat gearbeitet. –

3

Sie folgendes könnte:

let p = new Promise((resolve, reject) => { 
    console.log("create promise"); 
    reject("nope"); 
}); 
console.log("setting up"); 
p.then(r => console.log("then: " + r), // <----- 
    e => console.log("reject: " + e)); 
+1

Eigentlich funktioniert das, danke, daran habe ich nie gedacht. Aber warum ist es falsch, den Rückruf ".catch" zu verwenden? –

+1

Es ist, weil "catch" ist ein Versprechen Handler (dann oder fangen) und sie hören nicht auf zu verketten ... –

Verwandte Themen