如何在promise.then()中检索对此的引用?

时间:2018-08-12 03:01:27

标签: javascript node.js promise es6-promise

javascript / Node.js

我如何在promise中检索对此对象的引用。然后?

var controller = new MyController(params);

controller.action_send();

/////////////////////////////////

class MyController{

    constructor(params)
    {
        this.params = params;
    }

    action_send()
    {
        var promise = ext_lib.send();


        promise.then(
            function(details) {

                this.action_save(details);
                //(node:27014) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'action_save' of undefined
           });
   }

    action_save(details)
    {  
     save (this.params, details);
    }   
}

PHPStorm警告说 警告不要尝试通过此方法引用ECMAScript类成员的常见错误。 非lambda的嵌套函数中的限定符。 嵌套函数(不是lambda)中的this是函数自己的“ this”,与外部类无关。

从现在开始tks

3 个答案:

答案 0 :(得分:2)

您要使用箭头功能:(details) => {...}。这将使作用域与函数外部的作用域相同,因此this应该是您的类。

我还建议您查找function语法和=>语法之间的区别,有人可能会比我更好地解释它。

答案 1 :(得分:2)

使用arrow function

与常规函数不同,箭头函数不会绑定this。取而代之的是,这是按词法绑定的(即,其含义与其原始上下文保持一致)。

这里有更多有关Arrow Functions的信息

答案 2 :(得分:0)

只需添加到以上答案中,这就是您的代码应为的样子

promise()
.then(function (results) {
  }.bind(this)
).catch(...);

确保绑定只是在关闭 then()

之前