我正在尝试将值设置为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/