簡體   English   中英

如何凍結/停止 JavaScript 執行,直到 function 完成

[英]How to freeze/stop JavaScript execution until a function is done

我想知道如何凍結/停止 JavaScript 執行,直到 function 完成(使用 JavaScript/NodeJS)。 例如: 在此處輸入圖像描述

控制台中的第一行代碼顯示了使用警告,JavaScript 執行被凍結/停止,直到用戶單擊ok 在此處輸入圖像描述

完成后,第二行代碼將繼續執行在此處輸入圖像描述

現在,我知道我應該使用異步函數來做到這一點,但這不起作用,這是我在Electronwebview的預加載腳本中加載的節點代碼:

global.alert = async (text) => {
  //replace it with custom alert!
  ipcRenderer.sendToHost('ShowAnAlert', {
    theWebsiteLink: location.href,
    theMessage: text
  });
  var a = await function(){
    return new Promise(resolve => {
      ipcRenderer.on('GetResult', () => {
        console.log("Done!");
        resolve("result");
      });
    });
  }();
  return a;
}

但它不會在執行時凍結/停止 JavaScript 執行。 我該如何解決?

編輯 1:好的,事實證明異步不是我正在尋找的答案。

global.alert = (text) => {
  //replace it with custom alert!
  ipcRenderer.sendToHost('ShowAnAlert', {
    theWebsiteLink: location.href,
    theMessage: text
  });
  var a = ipcRenderer.on('GetResult', () => {
    console.log("Done!");
  });
  return a;//this is returned as undefined
}

我已經刪除了腳本中的異步部分。 但是 function 沒有凍結/停止 JavaScript 執行。 知道我該怎么做嗎?

編輯 2:如果在純 JavaScript 中無法做到這一點,是否還有其他方法可以使用Electron 本機函數Electron 庫/模塊來做到這一點

根據定義,異步 function 是異步的,不會停止腳本的執行。 如果您希望它停止執行,則需要刪除它的異步部分(Promise,異步和等待)。

那個部分

var a = ipcRenderer.on('GetResult', () => {
    console.log("Done!");
  });

是一個事件偵聽器,因此它會在其中運行 console.log 之前等待“GetResult”事件。 這也將返回未定義,因此a未定義。

暫無
暫無

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

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