2016-04-05 11 views
0

を得、私は、通常、以下のような非同期関数を使用する:KoajsでKoajsはexpressjsで関数の戻り値

function foo(callback) { 
    var bar = {a: 1, b: 2}; 
    callback(null, bar); 
} 

foo(function(err, result) { 
    // result is {a: 1, b: 2} 
}); 

、私は以下のようなルート機能にyieldを使用:

function foo(callback) { 
    var bar = {a: 1, b: 2}; 
    callback(null, bar); 
} 
var result = yield foo.bind(null); // [{a: 1, b: 2}] 

I期待します結果は{a: 1, b: 2}ですが、結果は配列[{a: 1, b: 2}]です。

だから、私はどのようにして期待値を得ることができますか? (それはあなたのために可能性の場合)

+0

通常、[co](https://github.com/tj/co#yieldables)で通常の機能を実行することはできないので、少しうんざりです。 Koajsは、あなたが正規の機能を生み出すことができる何らかの操作をしているに違いない。いずれにせよ、私は実際にあなたが見ているアレイを見ていない。どのバージョンのkoaを使用していますか? – dvlsg

答えて

0

脇のCoペテン対興亜、あなたは本当に、好ましくは、本来の機能を変更することで、あなたの非同期メソッドをpromisify必要があります。

function foo() { 
    let bar = { a: 1, b: 2 }; 
    return Promise.resolve(bar); 
} 

let data = yield foo(); 

ことがない可能性(あまりにも多くのなら関数は他の誰かの機能など)を使用して、まだ他の場所でコールバックとして使用されて、変換するには、このようにそれらをラップすることがあります。

function fooPromise() { 
    return new Promise((resolve, reject) => { 
     // assume foo is defined externally 
     foo((err, result) => { 
      if (err) 
       return reject(err); 
      return resolve(result); 
     }); 
    }); 
} 

let data = yield fooPromise(); 

あなたのためのコールバックメソッドをラップするいくつかのライブラリがありますが、S uchをbluebirdとしていますが、カバーするのがほんの少しあれば、自分で行うのはかなり簡単です。