ES6 / Bluebird的对象方法

克尔

在带有标志的Windows上使用节点v0.11.14-nightly-20140819-preharmony

我的JavaScript对象在其原型中定义了两种方法:

function User (args) {
    this.service= new Service(args);
}

User.prototype.method2 = function (response) {
    console.log(this); // <= UNDEFINED!!!!
};

User.prototype.method1 = function () {
    .............
    this.service.serviceMethod(args)
        .then(this.method2)
        .catch(onRejected);
};

function onRejected(val) {
    console.log(val);
}

serviceMethodService对象返回一个承诺。

当我使用User如下对象时:

let user = new User(args);
user.method1();

thismethod2对象的User结束undefined时,由被称为then一旦承诺得到满足。

我尝试同时使用ES6Bluebird promise实现。

为什么this最终会undefined出现这种情况?

贝吉

为什么this最终会undefined出现这种情况?

因为您传递的是函数,而不是方法绑定的实例。这个问题甚至不是特定于Promise的,请参阅如何在回调中访问正确的`this`上下文?对于通用解决方案:

….then(this.method2.bind(this))… // ES5 .bind() Function method

….then((r) => this.method2(r))… // ES6 arrow function

但是,Bluebird确实提供了另一种方法来调用函数:

this.service.serviceMethod(args)
    .bind(this)
    .then(this.method2)
    .catch(onRejected);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象集 ecmascript 6 (es6)

来自分类Dev

ES6速记对象键检查

来自分类Dev

链接JavaScript(ES6)代理对象

来自分类Dev

解构对象数组(ES6)

来自分类Dev

对象es6的条件解构数组

来自分类Dev

对象销毁ES6类

来自分类Dev

链接JavaScript(ES6)代理对象

来自分类Dev

ES6中的条件对象分配

来自分类Dev

ES6 对象赋值简化

来自分类Dev

React/ES6 减少对象

来自分类Dev

Javascript 对象到 ES6 类

来自分类Dev

数组操作:合并对象 [ES6]

来自分类Dev

ES6对象方法分配之间的区别:a,'a'和['a']?

来自分类Dev

在ES6中返回对象内部方法的数据

来自分类Dev

Promise.all中的罐头(ES6和Bluebird)

来自分类Dev

如何枚举ES6类方法

来自分类Dev

es6类方法中的“ this”

来自分类Dev

ES6 中的方法原型

来自分类Dev

ES6中的getter方法在ES6之前的替代方法是什么

来自分类Dev

JavaScript ES6:es6类中的分组方法?

来自分类Dev

迭代es6中的对象并返回新对象

来自分类Dev

将对象映射到 ES6 中的对象数组

来自分类Dev

Javascript ES6更好的循环对象并与多个嵌套对象匹配并返回ID的方法

来自分类Dev

es6从数组分解为对象的语法

来自分类Dev

使用(ES6)计算的属性名称更新嵌套对象

来自分类Dev

带有es6承诺对象的sinon存根

来自分类Dev

在ES6中,如何检查对象的类?

来自分类Dev

从地图返回的React对象传播(ES6)

来自分类Dev

在ES6中使用'this'内部对象文字