var app = require('koa')();
var router = require('koa-router')();
var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));
router
.get('*', function *(next) {
fs.readFileAsync('static/home.html','utf8')
.then(function(data){
console.log(data)
});
});
koa.use(router.routes());
koa.listen(8888);
我有上面的工作,因为我喜欢使用bluebird promises,但是,是否有一种更像同步的方式(虽然仍然是异步的)这样做?
A-LA:
router
.get('*', function *(next) {
var data = fs.readFile('static/home.html','utf8');
console.log(data);
});
我计划最初使用thunk,但是读到co不会继续支持它。那还有另一种方法吗?喜欢使用发电机或什么? 我知道我可以让上面的函数暂停,但这并不能保证操作在它回来的时候就完成了吗?
答案 0 :(得分:1)
co
将屈服于承诺,所以你的第二个例子几乎是完美的。您可能只需要在yield
电话中添加fs.readFileAsync
语句。像这样:
router
.get('*', function *(next) {
var data = yield fs.readFileAsync('static/home.html','utf8');
console.log(data);
});