是否可以在 promise 执行器函数中设置 `this` 的值?
Is it possible to set the value of `this` inside a promise executor function?
在这段代码中是否可行:
var this_module = {
foo: 'something'
promise: new Promise (function(resolve, reject) {
resolve (this.foo);
})
}
将 this
的值设置为 this_module
以便 this.foo
将是 foo: 'something'
?
您需要使用 getter 语法:
var this_module = {
foo: 'something'
get promise() {
return new Promise (function(resolve, reject) {
resolve (this.foo);
}.bind(this))
}
}
这是因为在向对象添加 属性 时没有初始化对象本身 promise: new Promise()
。
在 getter 中,对象已经初始化,回调可以与 this
对象绑定(see more 关于 .bind()
)。
注意:每次访问 属性 时都会 return 一个新的承诺(感谢@Felix)。
不调用 new Promise
在 对象创建之后:
this_module.promise = new Promise(function(...) { ... }.bind(this_module));
这与 Self-references in object literal declarations 中涉及的问题基本相同:您试图在初始化期间访问对象实例,这是不可能的。
在这段代码中是否可行:
var this_module = {
foo: 'something'
promise: new Promise (function(resolve, reject) {
resolve (this.foo);
})
}
将 this
的值设置为 this_module
以便 this.foo
将是 foo: 'something'
?
您需要使用 getter 语法:
var this_module = {
foo: 'something'
get promise() {
return new Promise (function(resolve, reject) {
resolve (this.foo);
}.bind(this))
}
}
这是因为在向对象添加 属性 时没有初始化对象本身 promise: new Promise()
。
在 getter 中,对象已经初始化,回调可以与 this
对象绑定(see more 关于 .bind()
)。
注意:每次访问 属性 时都会 return 一个新的承诺(感谢@Felix)。
不调用 new Promise
在 对象创建之后:
this_module.promise = new Promise(function(...) { ... }.bind(this_module));
这与 Self-references in object literal declarations 中涉及的问题基本相同:您试图在初始化期间访问对象实例,这是不可能的。