2

我正在尝试让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
    });
});

我的问题是,这是应该如何使用它,还是我错过了什么。似乎有很多额外的代码来包装所有东西?

4

1 回答 1

4

于是我又想了一遍。

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

    yield something();

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

        yield something();

    }));

    yield something();
}));

这应该可以解决问题。Wrap 返回一个函数,该函数将返回一个 Promise。这里我们不关心后者。 Co.wrap 上的 Co 文档

于 2015-09-29T21:39:07.953 回答