2017-05-02 1 views
0

Ich habe die folgenden Code-Snippet. Es hat eine Funktion fn1, die eine promise Variable definiert. Die promise speichert das Versprechen Objekt Rückgabe von fn2. Ich habe then auf diesem promise Objekt aufgerufen und schließlich das promise zurückgegeben.Return-Versprechen Variable der Hauptfunktion nach dem "dann" Zweig

function fn1() { 
    var promise = fn2(a, b); 
    promise.then(function() { 
     console.log('handling then'); 
     console.log('doing something'); 
    }); 
    return promise; 
} 

Da der then Zweig Asynchron-Code ist, ist mein Verständnis, wenn die innere Funktion ist async die äußere Funktion verhält sich auch in asynchroner Weise. Aber das Problem ist das promise Objekt wird zurückgegeben, bevor der Code innerhalb then abgeschlossen wird.

Ich habe versucht, das promise Objekt innerhalb then wie unten angegeben. Aber das gibt nicht die in fn1 definierte promise zurück.

Bitte helfen Sie, wie ich dies umgehen kann. Vielen Dank.

+0

Was möchten Sie erreichen? Es kann sein, dass Sie die falsche Methode wählen ("Rückkehr" nach einem asynchronen Anruf ist nicht wirklich hilfreich). – Hodrobond

+0

@Hodrobond - Ich brauche das Versprechen Objekt zurückgegeben werden, weil ein anderes Stück Code dieses Versprechen Objekt verwendet, um etwas anderes zu tun. Was ist der Workaround dafür? – Harish

Antwort

0

Sie wollen, dies zu tun:

function fn1() { 
    var promise = fn2(a, b); 
    return promise 
} 

fn1().then(function() { 
    console.log('handling then'); 
    console.log('doing something'); 
}); 

Oder Sie könnten dies nur tun:

fn2(a, b).then(() => { /* do something */ }) 
0

Aber das Problem ist das Versprechen Objekt zurückgegeben wird, bevor der Code innerhalb dann abgeschlossen ist.

Dann ist Ihr Konzept von Async fehlerhaft. Async tut nicht Blockausführung. Ein Versprechen ist ein Objekt, das eine ausstehende Operation darstellt. Es ist das, was Sie wissen, wenn diese Operation abgeschlossen ist oder nicht. Sie fügen Rückrufe zu Versprechen hinzu, um zu wissen, ob es getan hat.

Was Sie zu tun scheinen, ist zu wissen, ob fn2 über fn1 abgeschlossen ist, Verarbeitung auf dem Weg zu tun.

function fn1() { 
    return fn2(a, b).then(function() { 
     console.log('handling then'); 
     console.log('doing something'); 
    }); 
} 

fn1.then(function(){ 
    // fn2 completed, fn1 completed handling 
}); 
Verwandte Themen