Socket.io + co:这是应该如何使用的吗?

时间:2015-09-29 20:34:04

标签: node.js socket.io co

我想让http://socket.io/co合作。

我正在尝试在代码中异步执行某些任务。

io.on('connection', function (socket) {

    // <--- need to do something heavy here

    socket.on('something', function (data) {

        // <--- need to do something heavy here

    });

    // <--- need to do something heavy here

});

socket.io的工作原理。我想现在添加co。我尝试过以下方法:

io.on('connection', function (socket) {
    co(function* () {

        yield something(); // <--- this works

        socket.on('something', function (data) {

            yield something(); // <--- this does not work

        });

        yield something(); // <--- this works
    });
});

收到此错误:SyntaxError: Unexpected strict mode reserved word

而且:

io.on('connection', function (socket) {
    co(function* () {

        yield something(); // <--- this works

        socket.on('something', function (data) {

            co(function* () {
                yield something(); // <--- this works
            });

        });

        yield something(); // <--- this works
    });
});

我的问题是,这是应该如何使用,或者是我错过的东西。包装所有内容似乎是一个非常多的额外代码?

1 个答案:

答案 0 :(得分:4)

所以我又想了想。

io.on('connection', co.wrap(function *(socket) {

    yield something();

    socket.on('something', co.wrap(function *(data) {

        yield something();

    }));

    yield something();
}));

这应该做的伎俩。 Wrap返回一个函数,然后返回一个Promise。在这里我们不关心后者。 Co Documentation On Co.wrap