簡體   English   中英

自定義節點同步功能

[英]Custom node sync function

Node提供了兩種核心功能,即同步和異步。

fs.readFileSync類的同步功能對於啟動應用程序(例如在npm軟件包dotenv中)非常有用。

是否可以編寫不需要asyncawait關鍵字的自定義Sync函數,從而繞過Promise和Callback地獄?

是否可以編寫不需要async和await關鍵字的自定義Sync函數,從而繞過Promise和Callback地獄?

是。 只需讓該函數僅使用其調用的任何API函數的Sync版本即可。

如果該函數必須使用異步API函數或模塊,則否,您不能(立即)創建自己的Sync版本(也不想)。 可以觸發一個單獨的子進程來完成異步工作並同步等待它( execSyncspawnSync )...(我不記得具體細節,但是由於某種原因,至少有一個npm模塊可以做到這一點。 ..)


...但是它們不能用於類構造或應用程序中更典型的server.js起點...

是的,它們在兩種情況下都可以。 這是一個例子:

 function somethingAsync() { return new Promise(resolve => { setTimeout(resolve, 400, Math.floor(Math.random() * 10)); }); } // Using async/await in a class: class Example { async doSomething() { let a = await somethingAsync(); return a * 2; } } // Using async/await in a top-level script: (async () => { try { const ex = new Example(); console.log("Waiting..."); const v = await ex.doSomething(); console.log(v); } catch (e) { console.error("Error: ", e); } })(); 

請注意,在該異步函數的主體周圍使用try / catch (或在其返回值上使用.catch )很重要,以避免在函數的promise(記住, async函數返回promises)被拒絕時發生未處理的拒絕錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM