当前位置:  开发笔记 > 编程语言 > 正文

Promise.resolve对象不是构造函数

如何解决《Promise.resolve对象不是构造函数》经验,为你挑选了1个好方法。

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

例如:

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

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

foo.privateMethod = () => Promise.resolve();

一切都很好,但无论如何

foo.privateMethod = Promise.resolve;

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

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



1> trincot..:

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

要确保使用第二种语法正确设置了上下文,请使用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')); 
推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有