0
я следующий код в моем компоненте и chats.push() функции в методе ionViewDidLoad генерирует ошибку:доступа внутри подписки() в ionViewDidLoad()
@Component({
selector: 'page-messages',
templateUrl: 'messages.html'
})
export class MessagesPage {
currentUser: User;
chats: Chat[];
constructor(public navCtrl: NavController, public navParams: NavParams, private _auth: AuthService, private _db: DatabaseService, private _user: UserService) {
console.log('constructor MessagesPage');
// Get currently authenticated user
this.currentUser = this._auth.currentUser;
}
ionViewDidLoad() {
//console.log(this.chats.length);
console.log('ionViewDidLoad MessagesPage');
// Load chats
this._user.getChatsAsObservableList(this.currentUser.uid).subscribe(tmpChats => {
tmpChats.forEach(tmpChat => {
console.log(tmpChat);
// Retrieve chat id
let chatId = tmpChat.$key;
console.log('Retrieving a chat with id ', chatId);
// Instantiate a Chat object
let chat = new Chat(chatId, tmpChat);
// Retieve its members
let chatMembers = this._db.getChatMembersAsObservableList(chatId);
// For each member retieve the user info and add it the memebers of the Chat object
chatMembers.subscribe(members => {
members.forEach(member => {
this.addMemberToChat(chatId, member.$key);
});
});
// finally add the chat to the chat list
this.chats.push(chat); // Generates an ERROR : Cannot read property 'push' of undefined
console.log('Chat:', chat);
});
});
}
// Methods
addMemberToChat(chat: Chat, uid: string) {
if (uid) {
let userAsObservableObj = this._user.getUserAsObservableObj(uid);
let user = new User(uid, userAsObservableObj);
chat.members.push(user);
} else {
console.log('Could not add member to Chat object because uid was empty.');
}
}
}
Я предполагаю, что это является «эта» проблема, и я вижу много сообщений об этом, но я не мог решить ее с помощью толстой стрелки. Я думаю, это потому, что у меня есть несколько уровней обещаний ...
Как я могу это решить?
Я не вижу 'this' проблему. Интересно, почему вы передаете 'chatId' в' addMemberToChat (...) ', а затем получаете его как' chat: Chat' и получаете доступ к '' членам '' push (user) '. Я бы предположил, что 'chatId' является числом или строкой, а не сложным объектом. –
Попробуйте инициализировать переменную чата, например 'chats: Chat [] = [];' –
Вы правы, это была ошибка, код должен был быть this.addMemberToChat (chat, member. $ Key). У вас есть идея, почему у меня есть эта неопределенная проблема? –