Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么承诺与承诺是一致的?_Javascript_Promise_Ecmascript 6_Babeljs - Fatal编程技术网

Javascript 为什么承诺与承诺是一致的?

Javascript 为什么承诺与承诺是一致的?,javascript,promise,ecmascript-6,babeljs,Javascript,Promise,Ecmascript 6,Babeljs,我的代码中有一个承诺总是失败。当我将承诺返回给promise#然后回调时,它不会等待承诺解析,而是将其作为参数传递给后续的promise#,然后调用 有关更多详细代码,请参见本文中的代码。调用House#setEnergyData会导致问题(参见要点中的注释) 在我的代码中导致问题的基本模式如下所示(尽管这段文字代码确实有效): 它在浏览器中运行,使用Babel ES2015预设编译,并使用Babel polyfill。我没有使用任何Promisenpm模块 这在我的代码中的几个地方反复出现过。

我的代码中有一个承诺总是失败。当我将承诺返回给
promise#然后
回调时,它不会等待承诺解析,而是将其作为参数传递给后续的
promise#,然后
调用

有关更多详细代码,请参见本文中的代码。调用
House#setEnergyData
会导致问题(参见要点中的注释)

在我的代码中导致问题的基本模式如下所示(尽管这段文字代码确实有效):

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


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

尝试在
中包含
return
语句。然后()
step2
Promise
step2()调用中返回值

Class1类{
步骤1(){
返回新承诺((fnResolve,fnReject)=>{
//做点什么
决议(123);
});
}
步骤2(){
返回此.step1()。然后((数据)=>{
//做点别的
//在这里添加了“return”
返回数据
});
}
}
二级{
构造函数(){
this.class1=新的class1();
}
doSomething(){
这个.class1.step2()
。然后((res)=>{
console.log(res)//123
});
}
}
var c=新类2();

c、 doSomething()
@Paulpro我看到了-这是一个拼写错误,现已修复。在示例中显示您的实际代码,您永远不会解决或拒绝您的承诺。@naomik代码库不是开源的,但是你可以签出-问题是当调用
House#setEnergyData
时。你的代码毫无意义-承诺永远不会用承诺来解决-它们总是拆开我认为有效的值,但如果你看看我提供的要点,这似乎并不是一个关键区别(我在要点中返回一个对象)。另外,在
Class1#step2
中,尝试设置实例变量
this.step2_has_run=true并且不返回任何内容。然后在
Class2#doSomething
console.log(this.class1.step2_已经运行);//true
@EricH。“我认为这是可行的,但如果你看看我提供的要点,这似乎不是一个关键的区别(我在要点中返回一个对象)。”gist的
javascript
与问题的
javascript
不同?“另外,在Class1#step2中,尝试设置一个实例变量this.step2#u has#u run=true;并且不返回任何内容。然后在Class2#doSomething中,console.log(this.Class1.step2#u has#run)//true”?不确定预期结果是什么?是的,要点要复杂得多。在这个问题中,我只是用一种抽象的方式来表达这个问题。。。这可能没有帮助,因为它实际上是有效的-我在上面的注释中的示例试图指出,即使没有返回任何数据,代码仍然可以按预期工作。。。我会在问题中把这一点说得更清楚。@EricH。预期结果是什么?
.then()
创建一个新的
承诺
,尽管日志消息没有指示已解析的
承诺
的值是一个
承诺
[[PomiseValue]]
私有财产是
未定义的
at
js
问题;解析值不是
承诺
。问题中的
fnResolve
at
js
未传递任何值。如果将
123
传递给
fnResolve
,则应将
123
记录在
。然后()
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!
        });
   }
 }