目前场景非常简单,是在router文件中定义了一个generator function,用 yield 调用model文件中的一个方法, 而这个方法本身也是generator function,方法中yield 调用了一些第三方方法。全程thunkify处理。
用readFile模拟代码: 假设这是router中的一个路由,访问model层等待数据返回
var generator1 = function *(next) {
var thunk = thunkify(generator2);
// 程序会在这个地方停住,无法继续前进。
var res = yield thunk(__dirname + '../public/text');
this.body = res;
}
假设这是model层里的函数,操作数据库获得数据,
var generator2 = function *(fd, callback) {
var thunk = thunkify(fs.readFile);
var res = yield thunk(fd);
callback(null, res);
}
程序在注释处停止,没有任何响应,没有报错,程序也在运行,页面在不停等待。 经测试 generator2 函数改写成普通的回调函数,程序就会正常运行。
var generator2 = cb = function (fd, callback) {
fs.readFile(fd, function (err, data) {
callback(null, data);
});
}
不知道是方法不对,还是思路不对,yield就是进不去generator。 写过yield的人应该看过系统提示,可以yield function, generator, array, 等等 不知有没有人遇到过。