Node.js (ES7) 中的Fire and Forget Promise
在非同步程式設計中,通常會在不等待結果的情況下分叉任務。你能用 Node.js (ES7) 中的 Promise 做到這一點嗎?
問題:
考慮以下程式碼片段:
redisClientAsync.delAsync('key'); return await someOtherAsyncFunction();
可以您將第一行包裝在非同步函數中而不等待它嗎?如果這樣做會發生什麼事?
答案:
是的,您可以並行運行兩個非同步函數,而無需等待 delAsync 呼叫。透過創建和丟棄承諾,您實際上是在「解僱並忘記」它。
為什麼這不理想?
這種方法有一個明顯的缺點。如果 delAsync 承諾被拒絕,您將不會收到通知。這可能會導致未處理的拒絕錯誤和潛在的崩潰。
替代方法:
並行運行函數:要同時執行delAsync 和someOtherAsyncFunction 任務,可使用 Promise.all():
var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res;
這種情況下,delAsync的結果被忽略,但異常依然存在
結論:
雖然「即發即發忘」可能很方便,但必須考慮潛在的後果。透過明確定義您的需求(等待、結果處理和異常捕獲),您可以確保在 Node.js 應用程式中正確處理非同步任務。
以上是Node.js (ES7) Promise 可以非同步實現「即發即忘」嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!