如果您沒有返回流,那麼每個任務的異步結果將不會由其調用者等待,也不會被任何相關任務等待。
例如,不返回時流:這裏
$ gulp scripts
[21:25:05] Using gulpfile ~/my-project/gulpfile.js
[21:25:05] Starting 'tsc'...
[21:25:05] Finished 'tsc' after 13 ms
[21:25:05] Starting 'scripts'...
[21:25:05] Finished 'scripts' after 10 ms
[21:25:05] Compiling TypeScript files using tsc version 1.0.1.0
注意,scripts
任務取決於tsc
任務。它報告tsc
在13毫秒內完成,這絕對是太快而不能合理地相信。然後scripts
任務似乎在非常短的時間內開始並完成。最後,由tsc
開始的實際操作開始。顯然,tsc
和scripts
都沒有等待編譯步驟完成。
當這些任務返回其流,輸出看起來相當不同:
$ gulp scripts
[21:42:25] Using gulpfile ~/my-project/gulpfile.js
[21:42:25] Starting 'tsc'...
[21:42:25] Compiling TypeScript files using tsc version 1.0.1.0
[21:42:32] Finished 'tsc' after 6.65 s
[21:42:32] Starting 'scripts'...
[21:42:32] Finished 'scripts' after 204 ms
這裏的順序是有意義的,並且報告的持續時間達到預期。
如果您有一個異步但不涉及流的吞吐任務會怎樣?你可以調用'done()'函數還是返回一個promise? – Bill 2016-07-06 21:29:38
您可以定義任務,以便它接受回調函數作爲最終參數,或者您可以返回承諾。看到這裏:https://github.com/gulpjs/gulp/blob/v3.9.1/docs/API.md#gulptaskname--deps-fn – 2017-05-16 13:53:32