Javascript (Koa.js)生成器和产量基础

Javascript (Koa.js)生成器和产量基础,javascript,node.js,koa,Javascript,Node.js,Koa,我试图了解发电机是如何工作的(一般情况下和koa)。我有以下文件: Rooms.js-当玩家被分配到我想要运行Game.js模块的房间时,它处理将用户放置到房间(socket.io)和其他东西 var-Game=require('./Game'); (...) 游戏。StartName(室友) Game.js-函数startGame*()是从Rooms.js调用的:它应该执行一些代码,然后我希望它等待500毫秒,然后再运行一些代码 exports.startGame=function*(roo

我试图了解发电机是如何工作的(一般情况下和koa)。我有以下文件:

Rooms.js-当玩家被分配到我想要运行
Game.js
模块的房间时,它处理将用户放置到房间(socket.io)和其他东西

var-Game=require('./Game');
(...)
游戏。StartName(室友)
Game.js-函数
startGame*()
是从Rooms.js调用的:它应该执行一些代码,然后我希望它等待500毫秒,然后再运行一些代码

exports.startGame=function*(roomid){
console.log(“睡眠前”)
产量效用。睡眠(500)
日志(“睡眠后”)
}
Utility.js中的sleep()函数:

exports.sleep=函数(毫秒){
返回函数(cb){
设置超时(cb,ms);
};
}

但是它不起作用-Game.js中的生成器函数。我不知道那里出了什么问题。请提供帮助。

生成器必须由外部代码操作,例如库中的“运行程序”

Koajs在幕后使用co库,因此任何中间件都由co运行

我不清楚您是否在runner(koajs中间件)中运行Game.StartName(roomId),因为它是一个生成器,所以必须生成它(您的代码缺少它)

我有一个关于发电机的屏幕广播,你可能会觉得有用

以下是可运行代码(压缩为一个文件)的示例:

// example.js
'use strict';
let co = require('co');

let startGame = function *(roomid) {
  console.log("before sleep")
  yield sleep(500)
  console.log("after sleep")
}

let sleep = function (ms){
  return function(cb){
    setTimeout(cb, ms);
  }
}

co(function *(){
  // your code was missing yield
  yield startGame(123);
}).catch(function(err){
  console.log(err);
});
以下是输出:

$node example.js
before sleep
after sleep

非常感谢。你是对的,我以前不明白发电机一定是从外部产生的。此外,您的屏幕广播内容丰富,我希望能帮助我更好地理解发电机。:)