簡體   English   中英

消除 .then() 塊以獲得更好的 JavaScript 代碼結構

[英]Eliminating .then() blocks for a better code structure in JavaScript

為了更好地構建我的腳本,我想消除 .then() 塊。 IE轉

callAsyncFunction().then( (result) => {
    console.log("done");

    callAnotherAsyncFunction().then( (result2) => {
        console.log("also done");

        // further steps ...
    });
});

進入

callAsyncFunction().wait();
console.log("done");
callAnotherAsyncfunction().wait();
console.log("also done");
// further steps ...

我知道 JavaScript 不支持像 wait() 這樣的阻塞函數是有原因的。 但就我而言,如果有一個編譯器/轉錄器將 2. 示例中的代碼轉換為第 1 個示例的代碼,那將是完美的。 因此,它實際上不會阻止調用,但可以更好地表示回調。 有沒有像 dart 這樣的腳本語言,可以編譯成 JavaScript,支持這樣的功能? 我可以編寫自己的編譯器,但這本身就是一個項目,需要一段時間。

我也很清楚 async/await 的概念。 不幸的是,我必須將 main() 函數之前的所有函數聲明為異步,以便在等待調用時“阻止”它。

我注意到很多人都有這個問題,但到目前為止還沒有令人滿意的解決方案。

您可以為此使用async/await 它允許您編寫幾乎順序的代碼而不是處理.then 請記住,您不能在頂層使用await ,它始終需要在async函數內,例如:

const run = async () => {
  const result = await callAsyncFunction()
  console.log("done");
  const result2 = await callAnotherAsyncFunction();
  console.log("also done");
  // further steps ...
}

run();

暫無
暫無

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

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