为什么承诺会以承诺解决?

时间:2016-03-11 23:25:05

标签: javascript promise ecmascript-6 babeljs

我的代码中有一个始终失败的承诺。当我向Promise#then回调发送承诺,而不是等待承诺解决时,它会将其作为参数传递给后续的Promise#then调用。

有关更详细的代码,请参阅此gist中的代码。调用House#setEnergyData会导致问题(请参阅gist中的注释)。

在我的代码中导致问题的基本模式看起来像这样(虽然这个文字代码确实有效):

class Class1 {
    step1(){
       return new Promise((fnResolve, fnReject)=>{
       // do something
       fnResolve();
     });
    }

    step2(){
       return this.step1().then(()=>{ 
         // do something else
       });
    }
 }

 class Class2 {

   constructor(){
     this.class1 = new Class1();
   }

   doSomething(){
      this.class1.step2()
        .then((res)=>{
          console.log(res) // Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
          // do something that shouldn't happen until Class1#step2 has finished.
          // error!
        });
   }
 }

这是在浏览器中运行,使用Babel ES2015预设编译并使用Babel polyfill。我没有使用任何Promise npm模块。

这在我的代码中的几个地方再次出现。我不确定编译过程,babel polyfill或我误解的承诺是否存在问题。

1 个答案:

答案 0 :(得分:1)

尝试在return的{​​{1}}内添加.then()语句,以便在step2来电时从Promise返回值



step2()