我正在努力了解发电机是如何工作的(通常和在koa)。我有文件:
Rooms.js - 当玩家被分配到我想要运行的房间Game.js
模块
var Game = require('./Game');
(...)
Game.startGame(roomId)
Game.js - 从Rooms.js调用函数startGame*()
:它应该执行一些代码,然后我希望它等待让我们说500毫秒,然后它应该运行更多代码。
exports.startGame = function *(roomid) {
console.log("before sleep")
yield Utility.sleep(500)
console.log("after sleep")
}
Utility.js :中的和sleep()函数
exports.sleep = function(ms){
return function(cb) {
setTimeout(cb, ms);
};
}
但它不起作用 - Game.js中的生成器功能。而且我不知道那里有什么问题。请帮忙。
答案 0 :(得分:2)
生成器必须由外部代码,跑步者'例如co库。
Koajs在封面下使用co库,因此任何中间件都由co。
运行如果你在跑步者(koajs中间件)中运行Game.startGame(roomId),我不清楚,因为它是一个生成器,你必须让它(你的代码丢失)。
我有关于您可能会发现有帮助的发电机的截屏视频
http://knowthen.com/episode-2-understanding-javascript-generators/
以下是您可以运行的代码(压缩到一个文件)的示例:
// 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