2017-11-16 28 views
0

私はサーバー上にある公開ディスカッションを表示するための関数publicRoomsを持っています。私はaddNewMessageNewThreadを作成し、他の機能のために、このデータを使用したい:別の関数で関数を呼び出す

matrixClient.publicRooms(function(err, data) { 
    console.log("Public Rooms: %s", JSON.stringify(data)); 
    console.log("data", data.chunk[0].aliases[0]); 

    this.addNewMessageNewThread({ 
    'id': 'paul', 
    'author': 'Paul Manip', 
    'body': ' ?' 
    }); 
}); 

オフ私は彼がこの機能を知らない私に指示、それを行うとき:

ERROR TypeError: Cannot read property 'addNewMessageNewThread' of undefined

そして、私は外でこの機能をテストこの関数は、それが動作します

///////////これは私の機能です//////////////

EDIT:this.addNewMessageNewThreadmatrixClient.addNewMessageNewThreadと試みる呼び出しの

addNewMessageNewThread(objMessage: any): void { 

    const newUser: User  = new User(objMessage.author, objMessage.site); 
    const newThread: Thread = new Thread(objMessage.id, [newUser],objMessage.title); 
    const newMessage = new Message(objMessage); 

    objMessage.date = moment().toDate(); 

    newThread.arrayMessages.push(newMessage); 
    newThread.messages = Observable.of(newThread.arrayMessages); 

    newThread.lastMessage = newMessage; 

    objMessage.thread = newThread; 
    this.addThread(newThread); 
} 
+0

'addNewMessageNewThreadは()'何をしますか?万が一非同期ですか? – Archer

答えて

4

あなたはコンテキストthis渡す必要があります。

matrixClient.publicRooms(function(err, data) { 
    console.log("Public Rooms: %s", JSON.stringify(data)); 
    console.log("data", data.chunk[0].aliases[0]); 

    this.addNewMessageNewThread({ 
    'id': 'paul', 
    'author': 'Paul Manip', 
    'body': ' ?' 
    }); 
}, this); 

または親コンテキストを使用するようにarrow functionを使用する:

matrixClient.publicRooms((err, data) => { 
    console.log("Public Rooms: %s", JSON.stringify(data)); 
    console.log("data", data.chunk[0].aliases[0]); 

    this.addNewMessageNewThread({ 
    'id': 'paul', 
    'author': 'Paul Manip', 
    'body': ' ?' 
    }); 
}); 
+1

ありがとうございました。 2番目のソリューションはうまくいきます! – Floriane

0

Instrad。

thisは、コールバックのコンテキストを参照します。

このaddNewMessageNewThreadがASSING、matrixClient.publicRooms()を呼び出す前に、matrixClient(推測)に属していない場合:

var that = this; 

を、コールバックの代わりに、thisthatを使用しています。

関連する問題