2016-12-22 2 views
0

Mein Ziel ist es, eine Methode zum Laden eines Objekts, das ein Versprechen zurückgibt, zu machen. Wenn ich einen Rückruf habe, muss ich nur "toPromise" anrufen, das das Versprechen aus dem Rückruf erstellt. Aber jetzt möchte ich die Wartezeit für die Wiederverbindung mit dem Server einbeziehen, bevor ich das Objekt vom Server bekomme.Wie erstelle ich ein Versprechen mit zwei Callbacks, auf die gewartet werden muss?

public loadIntervention(numFI : number) : Promise<Intervention> 
{ 
    if (! this.Connected) 
    { 
     // here is the callback that detects reconnection 
     jQuery.connection.hub.reconnected(() => { ???? } ); 
    } 


    return this.proxy.server.getIntervention(numFI).toPromise(); 
} 

Wie soll ich es implementieren?

+0

Sie können in der Regel Kette Versprechen auf folgende Weise: 'Rückkehr promiseA.then (() => {return ... .. .}), so wird das zurückgegebene Versprechen von der Methode nur aufgelöst, wenn 'promiseB' aufgelöst wird und' promiseB' wird nur aufgelöst, wenn 'promiseA' dies tut. – Andrea

Antwort

0

Sie können eine Standard, bereits gelöst Versprechen erstellen:

let reconnectionPromise = Promise.resolve(); 

Dann, wenn Sie Wiederverbindung ausführen müssen, weisen Sie einfach das Versprechen reconnectionPromise durch Wiederverbindung Betrieb zurückgegeben:

reconnectionPromise = jQuery.connection.hub.reconnected(() => { ???? } ); 

Dann in der return Anweisung von loadIntervention Funktion, Kette die zwei Versprechen zusammen:

return reconnectionPromise.then(() => this.proxy.server.getIntervention(numFI).toPromise()); 

Also, in diesem Fall, wenn this.Connected ist true, ist reconnectionPromise ein bereits gelöst Versprechen und die then Funktion wird sofort aufgerufen this.proxy.server.getIntervention ausführt. Andernfalls, falls this.Connectedfalse ist, wird reconnectionPromise aufgelöst, wenn die Wiederverbindung erfolgt ist und dann die then Funktion, die this.proxy.server.getIntervention ausführt, wird aufgerufen.

die komplette Beispiel:

public loadIntervention(numFI : number) : Promise<Intervention> 
{ 
    let reconnectionPromise = Promise.resolve(); // Default, already resolved, promise 
    if (! this.Connected) 
    { 
     // If you need to perform reconnection, assign to "reconnectionPromise" 
     // the promise returned by "jQuery.connection.hub.reconnected" 
     reconnectionPromise = jQuery.connection.hub.reconnected(() => { ???? } ); 
    } 


    // Always chain the reconnectionPromise then do "getIntervention" 
    return reconnectionPromise.then(() => this.proxy.server.getIntervention(numFI).toPromise()); 
} 
Verwandte Themen