在继续前进之前等待承诺解决

时间:2017-10-29 12:42:03

标签: javascript asynchronous promise

我正在研究文本解析器。该代码旨在在浏览器中工作。它需要支持允许用户在处理文本时输入解析器使用的值[s]的能力。我找到了一个用于此目的的包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);
  }

请告知。

1 个答案:

答案 0 :(得分:0)

它没有用,因为你要从fillMacro返回一个承诺,代码会注意等待你的承诺得到履行,而且它将继续执行。您有多种解决方案可以解决您的问题:

  1. fillMacro成为承诺:

    fillMacro = new Promise((resolve, reject) => { // make your computations here });

    然后使用它:

    fillMacro.then((success) => { // this part will execute when the promise has been resolved })

  2. 使用async await

  3. 您也可以使用generators并自行处理异步部分,但我认为此解决方案不适合您的方案。