我的代码中有一个始终失败的承诺。当我向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或我误解的承诺是否存在问题。
答案 0 :(得分:1)
尝试在return
的{{1}}内添加.then()
语句,以便在step2
来电时从Promise
返回值
step2()