2016-06-14 5 views
1

Я пытаюсь синхронно вызывать обычную функцию стиля обратного вызова в koa с использованием генераторов. Следующий подход работает:Попытка запретить функцию обратного вызова для использования с генераторами (выход), не работает

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

Так что я не буду, чтобы заменить его надлежащего использования библиотеки, которые должны быть эквивалентны:

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

И это не работает. Разве это не должно быть одно и то же?

ответ

2

На самом деле вам вряд ли нужно использовать thunkify здесь, так как ваша функция не принимает аргумента. Вы можете (и должны), однако, упростить его

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

и, возможно, еще дальше, чтобы просто

yield myDaoObject.load; 

, который будет работать, если load не был метод, который используется this. Вам придется bind к объекту вы хотите его получить призвали:

yield myDaoObject.load.bind(myDaoObject); 

Той же проблема была с thunkify вызова - который был в противном случае штрафа (хотя и ненужный).

+0

Спасибо! Вздох. Вот почему я ненавижу JavaScript - это один из немногих языков, которые вам нужно знать, чтобы быть в состоянии использовать. –