javascript - Promise.resolve 对象不是构造函数

标签 javascript ecmascript-6 promise

我有一个对象有两个方法。 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/

相关文章:

javascript - HTML5 - 构建一个带有 map 区域高亮的 iPad 地址栏放大镜

JavaScript 符号并没有阻止对象中的名称冲突

reactjs - 使用 Babel 避免 ES6(7?) 中的 .bind

javascript - 如何识别 Promise.all() 中的结果

javascript - .match() javascript 有什么问题

javascript - 动态加载的 div 的事件名称

javascript - 在 Promise 解析器中使用 "this"类上下文

javascript - 异步函数返回一个 promise

javascript - 有人可以帮我解释一下下面的代码吗?

javascript - jquery 插件回调重置默认选项