我尝试从Redis数据库中获取信息,并将其作为响应主体返回给用户。首先,这是一个失败的代码:
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;
});
但我不太理解为什么第二个能工作。在“yield askRedit”中的“yield”与“yield next”中的“yield”具有相同的行为吗?
编辑:我刚看到一个似乎回答了一点问题的页面:https://github.com/visionmedia/co/blob/master/examples/redis.js 现在我将尝试理解这些神秘的yield...这是一种使用异步调用进行同步操作的方法吗?