次のコードスニペットがあります
var peer = {};
var foo = function ($scope, socket) { // socket is a factory to wrap socket.io in angular
socket.on('setUID', function (data) {
peer = new Peer(data);
});
};
var bar = function ($scope, socket) {
peer.on('connect', function () { alert("blah"); }); // this line doesn't work
}
// foo and bar are both controllers in angular, which are attached to separate areas in the application
基本的に、私がやろうとしているのは、クライアントが接続するとすぐに socket.io を使用して送信されるサーバー生成 ID を使用して、新しい PeerJS ピアを作成することです。そのため、 on リスナーがトリガーされる前にピア オブジェクトが作成されることがわかっています。ただし、javascriptはそれを認識していないと思います。コントローラーでピアの将来の機能を使用できるように設定するにはどうすればよいですか?
編集:これが私が現時点で持っているものです
app.factory('peer', function ($rootScope, socket) {
var peer = {};
socket.on('setUID', function (data) {
peer = new Peer(data, {host: 'localhost', port: 9000, path: "/peer/"});
console.log("Peer created");
peer.on('open', function (id) { // these work fine
console.log('My peer ID is: ' + id);
});
peer.on('connection', function (conn) {
conn.on('open', function () {
conn.on('data', function (data) {
console.log("Received: " + data);
});
});
});
});
return {
getPeer: function () {
return peer;
}
};
});
var bar = function ($scope, socket, peer) {
var p = peer.getPeer();
p.on("connection", console.log("hello")); // works once, then says p.on is not a function
}