1

私はlogInlinethunkと呼ばれています( Coのドキュメントから適応)。

thunkifiedgetは常にyield配列のように見えます。これは設計によるものですか?これthunkifyを行っていますか、それとも の標準部分yieldですか?

var co = require('co'),
  get = thunkify(request.get);

var logInline = co(function *(){
  var google = yield get('http://google.com'); 
  console.log(google[0].statusCode);
})

logInline()

ここで変数 'google' は常に配列であることに注意してください。なんで?request.get通常は返されることに注意してくださいerr, response(つまり、配列はありません)。

スクリプト、BTW、200または google.com が返すその他の応答コードが返されます。

残念ながら、利回りのドキュメントはかなりまばらな ATM です。

編集:サンクは常に配列を返すとは限りません。例var readFile = thunkify(fs.readFile);:

var fileContents = yield readFile('myfile', 'utf8');
log(fileContents);

この場合、fileContents は配列内では返されません。では、なぜ google は配列の中にあったのでしょうか? サンクが返すものを制御するサンク化に何かがあるようです

4

1 に答える 1

5

サンク化された get が常に配列を生成するように見えることに気付きました。これは設計によるものですか?

あなたが言うように、ドキュメント(coの、yieldここでは興味がありません)は非常にまばらです。

yieldただし、複数の戻り値を簡単にサポートするために、コールバックの引数配列が返されることをイメージできます。単一の結果を取得するために、分割代入を使用できます。

co(function *(){
  var [google] = yield get('http://google.com'); 
  console.log(google.statusCode);
})

編集:

サンクが返すものを制御するサンク化に何かがあるようです

実際、これは時々しか起こりません。私は今コードをチェックしました。

if (arguments.length > 2) res = slice.call(arguments, 1);

そのため、コールバック関数 (thunkified 呼び出しの、ただし、渡されるfs.readFilerequest.get直接渡される関数であると想像してください) が複数の結果引数で呼び出された場合 (エラー パラメーターは無視されます)、配列がyieldジェネレーターに渡されます。コード。

于 2014-04-11T14:21:17.313 に答える