Koa - Cleaner异步方式提供静态文件?

时间:2016-01-27 02:13:04

标签: node.js asynchronous synchronization bluebird koa

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不会继续支持它。那还有另一种方法吗?喜欢使用发电机或什么? 我知道我可以让上面的函数暂停,但这并不能保证操作在它回来的时候就完成了吗?

1 个答案:

答案 0 :(得分:1)

co将屈服于承诺,所以你的第二个例子几乎是完美的。您可能只需要在yield电话中添加fs.readFileAsync语句。像这样:

router
  .get('*', function *(next) {
    var data = yield fs.readFileAsync('static/home.html','utf8');
    console.log(data);
  });