可以'我找不到关于koa.js研讨会解决方案的解释,练习一
Can't find an explanation for koa.js workshop solution, exercise number one
它必须相当简单,但我无法理解koa研讨会开始练习的解决方案。
测试:
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
回调?我已经注销了这个回调,它是用stats
对象作为传递参数的生成器next()
方法,但我在co
中找不到任何关于回调注入的信息。这是怎么回事?提前谢谢。
我在主README.md
上找不到这些信息,但看起来co
自动为thunk提供了回调。因此,在上面的示例中,co
提供done
回调并调用:
function (done) {
fs.stat(filename, done);
}
如果出现错误,此回调预计主函数将返回错误(done(err);
),如果一切正常:done(null, result);
。然后将结果传递给生成器。这是done
回调代码:
function () {
if (called) return;
called = true;
next.apply(ctx, arguments);
}
好吧,让我们回到解决方案上来。co
的数字README.md
表示:
Thunk支持仅保留用于向后兼容性,并且可能在
co
的未来版本中删除。
因此,让我们用承诺将其改写为现代观点:
exports.stat = function(filename) {
return new Promise((resolve, reject) => {
fs.stat(filename, (err, stats) => {
if (err) {reject(err);}
resolve(stats);
});
});
};
我们用匿名函数包装promise,该函数获取filename
值,并将其封装为返回的promise对象,这是co
中支持的yieldables之一。此承诺通过回调启动fs.stat
。如果一切正常,这个回调resolve
是promise,否则reject
是promise。resolve
d的结果返回到生成器中。
相关文章:
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- AJAX HTTP基本身份验证解决方案
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- Chart.js-添加渐变而不是纯色-实现解决方案
- learnyounode杂耍异步解决方案不工作
- 了解因子分解解决方案
- 提交表单后的最佳解决方案
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- chrome中的意外全局变量有解决方案吗
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- JS驱动的常见问题页面的推荐DB解决方案
- 这里有一个更优雅的/DRY/可维护的JS解决方案
- 什么是农民最实用的解决方案;印刷动物”;
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 将数据加载到地图上的更好解决方案
- 我根据解决方案按类对
- 元素进行分组,但需要帮助了解它的工作原理
- 可以'我找不到关于koa.js研讨会解决方案的解释,练习一