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一次,但我不知道这应该如何影响最终结果.任何想法有什么不同?
两者并不完全相同.在工作版本中,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)
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |