2016-06-14 3 views
1

ジェネレータを使用してコールバックスタイル関数を同期的に呼び出そうとしています。次のアプローチは動作します:コールバックベースの関数をジェネレータで使用しようとすると、機能しません。

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

そして、それは動作しません:

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

だから私は同等であるべき正しいライブラリの使用とそれを交換する習慣。これらは同じものではありませんか?

答えて

2

実際には、ここではthunkifyを使用する必要はほとんどありません。関数には引数がないためです。あなたは(とすべきである)しかしちょうど

yield myDaoObject.load; 

loadthisを用いた方法ではなかった場合に働くだろうこれまで

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

そしておそらくさらにそれを簡素化することができます。 - (不要なが)それ以外の場合は大丈夫だった

yield myDaoObject.load.bind(myDaoObject); 

同じ問題があなたのthunkifyコールしていました:あなたはbindそれにあなたがそれは時に呼び出さたいオブジェクトになります。

+0

ありがとうございます!一口。これが私がJavaScriptを嫌う理由です。それは、あなたが実際に使用するために知る必要がある非常に少数の言語の1つです。 –

関連する問題