redis db から情報を取得し、それをレスポンスの本文としてユーザーに返そうとします。まず、失敗するコードは次のとおりです。
var redis = require("redis"),
koa = require("koa");
var app = koa(),
port = process.argv[2] || 3000,
client = redis.createClient();
app.use(function* (next) {
client.get("test", function (err, res) {
this.body = res;
});
yield next;
});
app.listen(port);
console.log("listen on port " + port)
確かに、コールバックが呼び出される前に yield 呼び出しが終了するためです。
次に、成功するコードを次に示します。
function askRedit (callback) {
client.get("test", callback);
}
app.use(function* (next) {
this.body = yield askRedit;
yield next;
});
しかし、2番目のものが機能している理由を明確に誤解しています。の はの と同じ動作をしyield
ますか?yield askRedit
yield next
編集:少し答えているように見えるページを見ました: https://github.com/visionmedia/co/blob/master/examples/redis.js
だから今、私はこれらの不思議な収量を理解しようとします..これは非同期呼び出しで同期的なことをする方法ですか?