在Promise.resolve中使用可值化Object进行销毁?

时间:2018-07-30 16:08:11

标签: javascript promise destructuring

以下代码使用Destructuring

var obj = {
  fun1:function() { console.log('Working') }
};

obj = { fun1:function(){ console.log("Replaced Working")} }

obj.fun1();

//output:
//Replaced Working

以下Promise是否也这样做?

var pr = Promise.resolve({then:function(resolve){
  resolve(20);
  }
})


pr.then(function(v){
  console.log(v);
})

是指pr等于Promise对象,其then方法更改为:

function(resolve){
  resolve(20);
}

最后,pr.then(function(v){...}产生结果。如果不使用Destructuring,那么为什么在then中传递了Promise.resolve属性呢?

1 个答案:

答案 0 :(得分:2)

  

以下代码使用解构

不,不是。销毁将是

 const { fun1 } = obj;
 fun1();

您正在重写一个属性。

  

以下Promise是否也一样?

不,不是。 resolve是promise构造函数的内部函数,然后调用传递到then s中的所有函数。根本没有重写任何属性。

  

为什么Promise.resolve中传递了then属性?

我不知道,那根本没有道理。如果您这样做:

 const pr = Promise.resolve(42);
 pr.then(console.log) // 42

如果传入一个对象,它将解析为该对象:

 const pr = Promise.resolve({ some: "thing" });
 pr.then(console.log); // { some: thing }

如果该对象具有then方法,则将其称为thenable对象,并且承诺将遵循该函数并假定其具有function(onFulfill, onReject)的签名。这是最后一个示例。