2017-06-02 1 views
0

Vor allem: Ist es möglich? Ich habe eine vage Erinnerung daran, dass das möglich ist, aber ich kann meine Frage nicht gut genug formulieren, damit Google/Stack mir eine Idee gibt, was ich tun soll.Javascript/TypeScript: Wie Code direkt nach der Rückgabeanweisung in demselben Bereich ausgeführt wird?

diesen Code Given (Transformationsfunktion innerhalb eines benutzerdefinierten Rohr -Angular 2-):

transform(statuses: Status[], test: string): Status[] { 

    return statuses.filter(status => status.Id === 1); 

    //Code to be executed after return has happened 
    this.updatePager.emit(); 
    } 

Wie bekomme ich den Code this.updatePager.emit(); nach meiner Rückkehr Aussage Recht geschehen.

Mit freundlichen Grüßen alle. Tipps zur Formulierung dieser Frage, damit ich weiter suchen kann, sind immer willkommen!

+0

'return' beendet die Funktion. –

+2

kann man nach 'return' nichts machen. 'setTimeout (func, 0)' könnte im nächsten Tick ausgeführt werden. – Val

Antwort

1

Dies könnte für Sie arbeitet, Ausführen von Code in der nächsten Anwendung tick mit setTimeout 0.

transform(statuses: Status[], test: string): Status[] { 
    //Code to be executed in the next tick 
    setTimeout(()=> this.updatePager.emit(), 0); 

    return statuses.filter(status => status.Id === 1); 
} 
+0

Dies scheint den Trick zu tun. Allerdings fühlt es sich für mich schmutzig an. Was ist, wenn die Return-Anweisung beim nächsten Tick noch nicht beendet ist? (Ich denke über wahnsinnig lange Listen nach) –

+1

Da javascript im Allgemeinen in einem einzelnen Thread läuft, gibt es eine Ausführungswarteschlange, die auf jedes Timing-Tick wartet. Ja, die 'return' Anweisung wird vor dem nächsten Tick enden, die' setTimeout 0' drückt einfach den Code in die nächste Tick Execution Queue. – Val

+0

Erstaunlich, vielen Dank Val! –

1

wie Nina Scholz sagte, Rückkehr beendet die Funktion. So können Sie den Code mit einer Verzögerung mit setTimeout ausführen:

transform(statuses: Status[], test: string): Status[] { 
    setTimeout(() => { 
     //Code to be executed after return has happened 
     this.updatePager.emit(); 
    }, 500) 

    return statuses.filter(status => status.Id === 1); 
} 
2

Dies sollte funktionieren.

transform(statuses: Status[], test: string): Status[] { 

    setTimeout(function(){ this.updatePager.emit(); }, 1000); //Adjust time here. 

    return statuses.filter(status => status.Id === 1); 

    } 
Verwandte Themen