2017-02-14 6 views
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.'); 
    } 
    } 

} 

Я предполагаю, что это является «эта» проблема, и я вижу много сообщений об этом, но я не мог решить ее с помощью толстой стрелки. Я думаю, это потому, что у меня есть несколько уровней обещаний ...

Как я могу это решить?

+1

Я не вижу 'this' проблему. Интересно, почему вы передаете 'chatId' в' addMemberToChat (...) ', а затем получаете его как' chat: Chat' и получаете доступ к '' членам '' push (user) '. Я бы предположил, что 'chatId' является числом или строкой, а не сложным объектом. –

+1

Попробуйте инициализировать переменную чата, например 'chats: Chat [] = [];' –

+0

Вы правы, это была ошибка, код должен был быть this.addMemberToChat (chat, member. $ Key). У вас есть идея, почему у меня есть эта неопределенная проблема? –

ответ

0

Initializing чатов решается вопрос:

chats: Chat[] = []; 

 Смежные вопросы

  • Нет связанных вопросов^_^