它必须相当简单,但我无法理解koa Workshop 开始练习的解决方案。
考试:
var co = require('co');
var assert = require('assert');
var fs = require('./index.js');
describe('.stats()', function () {
it('should stat this file', co(function* () {
var stats = yield fs.stat(__filename);
assert.ok(stats.size);
}));
});
解决方案和任务:
var fs = require('fs');
/**
* Create a yieldable version of `fs.stat()`:
*
* app.use(function* () {
* var stats = yield exports.stat(__filename);
* })
*
* Hint: you can return a yieldable.
*/
exports.stat = function (filename) {
return function (done) {
fs.stat(filename, done);
}
};
我对这个测试的看法是:co
库为我们运行生成器函数,fs.stat(__filename)
调用,返回
function (done) {
fs.stat(filename, done);
}
然后,我只有一个问题:为什么匿名函数fs.stat()
会在同一个地方返回,它在哪里需要done
回调?我已经记录了这个回调,它是next()
带有对象作为传递参数的生成器方法stats
,但是我找不到任何关于回调注入的信息co
。这是如何运作的?先感谢您。