如何在另一个函数中监听socket.on的结果?

时间:2014-07-19 03:20:05

标签: javascript node.js

我有一个像这样的标准socket.io函数:

function listen() {
    socket.on("event", function (data) {

        //return data ????

    });
}

我想在另一个外部函数中得到这个函数的结果:

App.listen(function(data) {
    //getting the result of listen() when a event is trigerred
});

我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

与其他事件一样socket.on不能像那样工作。您只能捕获参数,而不能捕获返回值。

App.value = null;
App.set_value = function(value){
    this.value = value
};

function listen() {
    socket.on("event", function (data) {

        App.value = data;
        //or
        App.set_value(data);
        //Last two calls will work
        //return data ???? will not work

    });
}

或者你也可以这样做。

function listen(App) {
    socket.on("event", function (data) {

        App.value = data;

        //or
        App.set_value(data);
        //Last two calls will work
        //return data ???? will not work

    });
}

listen(App)

如果您需要继续回调事件链或异步操作,那么您可以这样做。

App.do_something = function(data, func){
    AsyncFunction(data, func);
};
function listen() {
    socket.on("event", function (data) {

        App.do_something(data, function(data){
            //Using async data.
        });

    });
}

listen(App);

如果您正在使用Express(或其他一些框架),可能还有其他方法可以实现此目的。

答案 1 :(得分:0)

感谢您的回复,它帮助我构建了自己的解决方案。

这是我做的:

App.on = function(callback) {
    App.socket.on(this.reference, callback);
}

我称之为一个简单的倾听者:

App.on(function(data) {
    console.log(data);
});

只需从App.on传递一个回调函数,将此函数传递给socket.on,然后在App.on中执行此函数中的任何操作