2017-06-02 48 views
0

首先:有可能嗎?我對這種可能性有一種模糊的記憶,但我似乎無法爲谷歌/堆棧提供足夠好的問題,讓我知道該怎麼做。Javascript/TypeScript:如何在同一範圍內的return語句之後直接運行代碼?

鑑於此代碼(自定義管道內變換函數-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(); 
    } 

如何獲得的代碼this.updatePager.emit();我return語句之後發生的權利。

親切的問候每個人。有關如何制定這個問題的提示,以便我可以進一步搜索總是歡迎!

+0

'return'終止函數。 –

+2

''return'後你無法做任何事情。 'setTimeout(func,0)'可能會在下一個勾號中執行。 – Val

回答

1

這可能會爲你工作,在未來的應用程序中執行代碼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

這似乎在伎倆。但是,我感覺很骯髒。如果在下一個滴答聲中退貨聲明尚未完成呢? (我正在考慮瘋狂長列表) –

+1

由於JavaScript通常運行在單個線程中,因此有執行隊列正在等待每個時間點。是的,return語句會在下一個tick前完成,'setTimeout 0'只是將代碼推入下一個tick執行隊列。 – Val

+0

令人驚歎,非常感謝Val! –

1

就像Nina Scholz所說的那樣,返回終止函數。所以,你可以使用的setTimeout延遲執行該代碼:

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

這應該起作用。

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

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

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

    } 
相關問題