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