(Koa.js)发电机和产量基础

时间:2015-07-16 17:28:41

标签: javascript node.js koa

我正在努力了解发电机是如何工作的(通常和在koa)。我有文件:

Rooms.js - 当玩家被分配到我想要运行的房间Game.js模块

时,它处理用户到房间(socket.io)和东西
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中的生成器功能。而且我不知道那里有什么问题。请帮忙。

1 个答案:

答案 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