我有下面的代码片段使用你知道一个对象的功能将在Javascript中创建和角度(特色Peerjs和Socket.io)
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
从本质上讲,我试图做的是创建一个新的PeerJS对等体使用服务器生成的ID,一旦客户端连接,它就使用socket.io传输。因此,我知道在监听器被触发之前会创建对等对象。但是,我不认为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
}
仍然有与' peer.getPeer()'它可能会也可能不会返回一个实例化的'Peer',这取决于socket.on(“setUID”,...)是什么时候发生的 – craigb 2015-02-06 01:26:02