我有一个对象有两个方法。
foo.publicMethod()
将在内部调用 foo.privateMethod()
。
例如:
foo.prototype.publicMethod = function() {
return this.privateMethod()
.then(/* Do some other stuff */);
};
为了单独测试公共(public)方法,我通过使私有(private)方法返回一个空的 promise 来对私有(private)方法进行 stub 。 出于某种原因,如果我分配
foo.privateMethod = () => Promise.resolve();
一切正常,但是做
foo.privateMethod = Promise.resolve;
产生一条错误消息:TypeError: object is not a constructor
我看不出这两行代码会产生不同的结果。是的,一个是技术上包装 Promise.resolve
一次,但我不明白这应该如何影响最终结果。有什么不同的想法吗?
最佳答案
两者并不完全相同。在工作版本中,resolve
调用的上下文是 Promise
对象。在第二个版本中,上下文是调用 privateMethod
的任何上下文,当您将其称为 foo.privateMethod()
时,它将是 foo
.
要确保使用第二种语法正确设置上下文,请使用 bind
:
foo.privateMethod = Promise.resolve.bind(Promise);
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'));
关于javascript - Promise.resolve 对象不是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41725078/