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 の共同ドキュメンテーション

于 2015-09-29T21:39:07.953 に答える