无法读取未定义的属性

无法读取未定义的属性

我正在尝试将值设置为userSessionStorage,当我从authenticate()函数访问它时,它似乎可以正常工作。

但是,它不能在.then()承诺中使用。

应用程序/控制器/show.js

import Ember from 'ember';
import { storageFor } from 'ember-local-storage';

export default Ember.Controller.extend({
  session: Ember.inject.service('session'),

  userSessionStorage: storageFor('user'),

  authenticator: 'authenticator:custom',

  actions: {
    authenticate: function() {
      var credentials = this.getProperties('identification', 'password');
      // ok
      this.set('userSessionStorage.username', credentials.identification);

      this.get('session').authenticate('authenticator:custom', credentials)
        .then(function(){

          // error: TypeError: Cannot read property 'set' of undefined
          this.set('userSessionStorage.username', credentials.identification);

        })
        .catch((message) => {
          console.log("message: " + message);

          this.controller.set('loginFailed', true);
        });
    }
  }
});

最佳答案

您需要做的就是更改以下行:

 this.get('session').authenticate('authenticator:custom', credentials)
        .then(function(){....}


如下使用粗箭头符号:

 this.get('session').authenticate('authenticator:custom', credentials)
        .then(()=>{....}


这样,promise上下文中的this上下文将成为您的控制者。有关ES6箭头功能的更多信息,请参见following

关于javascript - Ember :TypeError:无法读取未定义的属性“set”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43567355/

10-11 15:28