簡體   English   中英

等待承諾解決,然后繼續前進

[英]Waiting for Promise to resolve before moving forward

我正在研究文本解析器。 該代碼旨在在瀏覽器中工作。 它需要支持一種功能,允許用戶在處理文本時輸入解析器要使用的值。 我發現有一個用於該目的的dialig-promise程序包,但是運行不正常。 我的目標是fillMacro()會阻塞直到對話框關閉,但它沒有發生。

  dataMacro(obj) {
    ...
    fragments.push(myDate);
  },
  fillMacro(obj) {
    console.log(`fillText ${JSON.stringify(obj)}`);
    return new Promise((resolve, reject) => {
      promptPromise("Please enter value for "+ obj.name, obj.defaultValue || '')
      .then(inp => {
        console.log('entered:', inp);
        resolve(inp);
      }, err => {
        console.log("User Escapes. Use default?")
        resolve(obj.defaultValue || '');
      });
    })
    .then(value => {
      fragments.push(value);          
    });
    console.log('finished processing fillText');
  },
  textMacro(obj) {
    ...
    fragments.push(myText);
  }

請指教。

它不起作用,因為您正在從fillMacro返回一個fillMacro ,並且代碼將指出等待您的Promise兌現,而它將繼續執行。 您有多種解決方案來解決您的問題:

  1. 使fillMacro成為一個承諾:
    fillMacro = new Promise((resolve, reject) => {
      // make your computations here
    });

然后使用它:

    fillMacro.then((success) => {
      // this part will execute when the promise has been resolved 
    });
  1. 使用async await

  2. 您也可以使用生成器並自行處理異步部分,但是我認為這種解決方案不適合您的情況。

暫無
暫無

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

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