【发布时间】:2016-03-19 03:11:09
【问题描述】:
我在一个简单的项目中使用 MySQL (mysql-co) 和 ASQ(asynquence) 来更好地理解 ES6 生成器和 yield 函数,但我被一个奇怪的行为难住了。
asynquence的简短解释
asynquence (https://github.com/getify/asynquence) 为我提供了一种按顺序运行生成器的简单方法。它也可以进行伪并行执行,但这不是我现在需要的。 function *x(token) 的结构来自那里。 token 在[0] 持有一个连接对象。 yield token 按顺序将控制权传递给下一个生成器函数。
代码示例 1(工作)
function *test1(token) {
var conn = token.messages[0];
var values = {id:1, dev:1, description:'This is it!'};
yield conn.query("INSERT INTO version SET ?", values);
yield token;
}
这很好用。上面描述的行被插入。我不知道 MySQL 驱动程序允许这么简单的插入函数,但确实如此。
代码示例 2(不起作用)
function *test1(token) {
var conn = token.messages[0];
var values = {id:1, dev:1, description:'This is it!'};
yield subtest1(conn, values);
yield token;
}
function *subtest1(conn, values) {
yield conn.query("INSERT INTO version SET ?", values);
}
这不起作用。 subtest1 的实际代码在模型类中,所以我不希望它与控制器合并。
我在 subtest 函数上尝试了很多不同的方法,有或没有 yield。
发生了什么事?
【问题讨论】:
标签: javascript mysql generator ecmascript-6 yield