gpt4 book ai didi

javascript - (Koa.js) 生成器和产量基础知识

转载 作者:行者123 更新时间:2023-12-02 15:57:53 25 4
gpt4 key购买 nike

我试图了解生成器是如何工作的(一般情况下以及在 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 中的生成器函数。我不知道那里出了什么问题。请帮忙。

最佳答案

生成器必须由外部代码(例如 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

关于javascript - (Koa.js) 生成器和产量基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com