【发布时间】:2016-03-11 23:25:05
【问题描述】:
我的代码中有一个承诺始终失败。当我向Promise#then 回调返回一个承诺时,它不会等待承诺解决,而是将其作为参数传递给后续的Promise#then 调用。
更多详细代码请参见gist 中的代码。调用 House#setEnergyData 会导致问题(请参阅 gist 中的 cmets)。
在我的代码中导致问题的基本模式如下所示(尽管此文字代码确实有效):
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 的问题,还是我误解了 Promise。
【问题讨论】:
-
@Paulpro 我看到了 - 这是一个错字,现在已修复。
-
显示你的实际代码
-
在您的示例中,您永远不会解决或拒绝您的承诺。
-
@naomik 代码库不是开源的,但您可以签出this gist - 问题在于何时调用
House#setEnergyData。 -
你的代码没有意义 - 承诺永远不会用承诺解决 - 他们总是解开价值
标签: javascript promise ecmascript-6 babeljs