我想让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
});
});
我的问题是,这是应该如何使用,或者是我错过的东西。包装所有内容似乎是一个非常多的额外代码?
答案 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