是否可以在promise执行函数中设置`this`的值?

时间:2016-03-04 14:22:53

标签: javascript this es6-promise

是否可以在此代码中使用:

var this_module = {

    foo: 'something'

    promise: new Promise (function(resolve, reject) {

        resolve (this.foo);
        })
}

this的值设置为this_module,以便this.foofoo: 'something'

2 个答案:

答案 0 :(得分:4)

在创建对象之后,不是没有调用new Promise

this_module.promise = new Promise(function(...) { ... }.bind(this_module));

这基本上与Self-references in object literal declarations中涉及的问题相同:您在初始化期间尝试访问对象实例,这根本不可能。

答案 1 :(得分:1)

您需要使用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())绑定。

注意:每次访问该属性时都会返回一个新的承诺(感谢@Felix)。