Promise.resolve对象不是构造函数

Tom*_*ski 3 javascript promise ecmascript-6

我有一个有两种方法的对象. foo.publicMethod()会在foo.privateMethod()内部打电话.

例如:

foo.prototype.publicMethod = function() { 
   return this.privateMethod()
       .then(/* Do some other stuff */); 
};
Run Code Online (Sandbox Code Playgroud)

为了单独测试公共方法,我通过使私有方法返回一个空的promise来存根.出于某种原因,如果我分配

foo.privateMethod = () => Promise.resolve();
Run Code Online (Sandbox Code Playgroud)

一切都很好,但无论如何

foo.privateMethod = Promise.resolve;
Run Code Online (Sandbox Code Playgroud)

生成错误消息: TypeError: object is not a constructor

我看不出这两行代码会产生不同的结果.是的,一个在技术上包装Promise.resolve一次,但我不知道这应该如何影响最终结果.任何想法有什么不同?

tri*_*cot 6

两者并不完全相同.在工作版本中,resolve调用的上下文是Promise对象.在第二个版本中,上下文privateMethod是调用的任何上下文,foo当您将其称为时foo.privateMethod().

要确保使用第二种语法正确设置了上下文,请使用bind:

foo.privateMethod = Promise.resolve.bind(Promise);
Run Code Online (Sandbox Code Playgroud)

function Foo() {}

Foo.prototype.publicMethod = function() { 
   return this.privateMethod(); 
};

var foo = new Foo();
foo.privateMethod = Promise.resolve.bind(Promise);

// Test it
foo.publicMethod().then ( _ => console.log('done')); 
Run Code Online (Sandbox Code Playgroud)