Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Socket.io+co:应该这样使用吗?_Node.js_Socket.io_Co - Fatal编程技术网

Node.js Socket.io+co:应该这样使用吗?

Node.js Socket.io+co:应该这样使用吗?,node.js,socket.io,co,Node.js,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

我正在努力和你一起工作

我试图在代码中异步执行一些任务

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

});
获取此错误:SyntaxError:意外的严格模式保留字

这是:

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
    });
});

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

所以我又考虑了一下

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

    yield something();

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

        yield something();

    }));

    yield something();
}));
这应该能奏效。Wrap返回一个函数,该函数将返回一个承诺。在这里,我们不关心后者。

发电机内部不能有异步逻辑。@KevinB我确实启用了严格模式。哦,好的。你试过socket.on'…',cofunction*data{};?我不认为co对套接字事件非常有用。承诺只解决一次,事件发生多次。你想完成什么?@KevinB我想以某种方式进行大量的异步数据库调用!我会尝试一下,然后回来。我完全忘记了我可以用co传递一个生成器函数DOHTadamn,它工作得非常完美:现在我只需要学习编写定制的承诺代码,我已经为大世界做好了准备。
io.on('connection', co.wrap(function *(socket) {

    yield something();

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

        yield something();

    }));

    yield something();
}));