我尝试从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
in yield askRedit
的行为与in in 的行为相同yield next
吗?
编辑:我刚刚看到一个页面似乎可以回答一些问题:https : //github.com/visionmedia/co/blob/master/examples/redis.js
因此,现在我将尝试了解这些错误的收益。这是通过异步调用完成同步操作的一种方法吗?
这是正确的解决方案:
这些链接帮助:
https://github.com/koajs/workshop/tree/master/01-co
http://www.jongleberry.com/koa.html
和“ co-redis”当然
多亏我自己!