繁体   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