2016-12-16 4 views
5

Ich verwende Versprechen in den Block des Codes unten, 2 zuerst dann() Ich nicht jeden Wert zurück, so dass ich mich wundere, dass die Funktion in der ersten dann() vor der Funktion aufgerufen wird das nächste dann(). Im Typoskript in Winkel 2. Verwendung Danke: Dmit dann() in Versprechen

Promise.resolve() 
    .then(()=>{ 
     this.getListStatus(); 
    }) 
    .then(()=>{ 
     return this._laundryServiceOrderService.findAll(true, offset, this.itemsPerPage, filterQuery) 
    }) 
    .then((response) => { 
     this.orders = response.data; 
     this.totalItems = response.totalItems; 
    }) 
    .catch(error => { 
     FlashMessage.setError(error.message); 
    }); 
+0

_ "Ich habe nicht einen beliebigen Wert zurückgeben" _ Warum kehren Sie keinen Wert? Was ist der Zweck von 'Promise.resolve()'? – guest271314

+1

Ich denke, die then() verwenden die Antwort von der vorherigen dann –

+1

@NhanNguyen: Richtig. –

Antwort

6

zuerst, dann() Ich habe nicht jeden Wert zurück, so frage ich mich, dass die Funktion in dem ersten dann() aufgerufen, bevor die Funktion in den nächsten dann().

Ja, ist es. (Dies kann trivialerweise mit einem Debugger überprüft werden.)

Es spielt keine Rolle, dass es keinen Wert zurückgibt; Das ist effektiv dasselbe wie return undefined. Der nächste Callback in der Kette wird also undefined als Auflösungswert sehen, aber da der nächste Callback sich nicht um den Auflösungswert kümmert, ist das in Ordnung.

Hier ist ein einfaches Beispiel zeigt es:

Promise.resolve("a") 
 
    .then(result => { 
 
    console.log("First callback got: " + result); // Gets "a" 
 
    }) 
 
    .then(result => { 
 
    console.log("Second callback got: " + result); // Gets undefined 
 
    return "b"; 
 
    }) 
 
    .then(result => { 
 
    console.log("Third callback got: " + result); // Gets "b" 
 
    }) 
 
    .catch(error => { 
 
    console.log("There's no error above, this won't get triggered."); 
 
    });

+0

vielen Dank –

Verwandte Themen