试图将基于回调的函数thunkify以用于生成器(yield)不起作用

时间:2016-06-14 05:14:29

标签: javascript node.js generator koa

我正在尝试使用生成器同步调用koa中的常规回调样式函数。以下方法有效:

  var res = yield function (cb) {
    myDaoObject.load(function (err, res) {
       cb(err, res);
    })
  };

所以我不会用适当的库使用替换它,它应该是等价的:

var ld = thunkify(myDaoObject.load);
var res = yield ld();

这不起作用。这些应该是不一样的吗?

1 个答案:

答案 0 :(得分:2)

实际上你几乎不需要在这里使用thunkify,因为你的功能没有参与。您可以(并且应该)将其简化为

yield function(cb) { myDaoObject.load(cb); }

甚至可能更进一步

yield myDaoObject.load;
如果load不是使用this的方法,

会有效。你必须bind到你希望它被调用的对象:

yield myDaoObject.load.bind(myDaoObject);

同样的问题出在你的thunkify电话上 - 否则很好(尽管没必要)。