1
私はnode.jsを初めて使用しており、ジェネレータ関数に呼び出しをラップすることによってcoライブラリを利用しているコードベースで作業しています。簡略化した例は、次のようになります。co node.jsライブラリの目的は何ですか?
module.exports.gatherData = function*()
{
// let img = //get the 1 pixel image from somewhere
// this.type = "image/gif";
// this.body = img;
co(saveData(this.query));
return;
}
function *saveData(query)
{
if(query.sid && query.url)
{
// save the data
}
}
だから私はgithubの上の共同のホームページに行き、説明が書かれています:
nodejsとブラウザのための「ジェネレータベースの制御フローの良さ、約束を使用して、あなたがAで非ブロックのコードを記述せ素敵なやり方。 "
node.jsのコンテキストでこのコードを非ブロックにすることはできませんか?
yield saveData(this.query)
*このコードはNode.jsののコンテキストで、あまりにも非ブロックではないでしょうか? * No.イテレータとジェネレータは同期動作です。 * co *ライブラリはジェネレータ構文を使用して、非同期コードを同期的に書かれているように見せる約束を守ります。 'yield saveData'は単に未解決のPromise – CodingIntrigue
実際には' co(saveData(this.query)); 'を生成しますが、ジェネレータ内部は実際にはゴミです。 – Bergi
なぜゴミは?あなたは詳しく説明できますか? –