Socket.io + co: 就应该这样使用吗?
Socket.io + co: Is this how it's supposed to be used?
我正在尝试获取 http://socket.io/ working with 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
});
});
我的问题是,它应该如何使用,还是我错过了什么。包装所有内容似乎需要大量额外代码?
于是又想了想
io.on('connection', co.wrap(function *(socket) {
yield something();
socket.on('something', co.wrap(function *(data) {
yield something();
}));
yield something();
}));
这应该可以解决问题。包装 returns 一个函数,然后 return 一个 Promise。这里我们不关心后者。
Co Documentation On Co.wrap
我正在尝试获取 http://socket.io/ working with 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
});
});
我的问题是,它应该如何使用,还是我错过了什么。包装所有内容似乎需要大量额外代码?
于是又想了想
io.on('connection', co.wrap(function *(socket) {
yield something();
socket.on('something', co.wrap(function *(data) {
yield something();
}));
yield something();
}));
这应该可以解决问题。包装 returns 一个函数,然后 return 一个 Promise。这里我们不关心后者。 Co Documentation On Co.wrap