Ale*_*anu 2 javascript node.js
我在下面的代码中做错了什么?在left_label和right_label变量似乎永远是“真”,当我知道我有他们在Redis的设置为某个字符串。我假设这是因为该client.get函数成功并返回 true,但是如何让它返回实际值?
var http = require('http');
var redis = require('redis');
var client = redis.createClient(6379, 127.0.0.1);
var server = http.createServer(function (request, response) {
var left_label = client.get('left', function(err, reply) {
console.log(reply);
return reply;
});
var right_label = client.get('right', function(err, reply) {
console.log(reply);
return reply;
});
response.writeHead(200, {"Content-Type": "text/html"});
var swig = require('swig');
var html = swig.renderFile('/var/www/nodejs/index.html', {
left: left_label,
right: right_label
});
response.end(html);
});
server.listen(8000);
console.log("Server running at http://127.0.0.1:8000/");
Run Code Online (Sandbox Code Playgroud)
这 get调用是异步的,必须进行处理的方式。
一个建议是将它与模块的 NPM 文档中建议的类似bluebird的承诺库结合起来redis。
这样,我们就可以承诺redis 模块并以更简单的方式使用它。
var redis = require('redis');
bluebird.promisifyAll(redis.RedisClient.prototype);
Run Code Online (Sandbox Code Playgroud)
并使用该get函数的新异步版本,如下所示。
function getLabelValues(){
var left_promise = client.getAsync("left").then(function(reply) {
return reply;
});
var right_promise = client.getAsync("right").then(function(reply) {
return reply;
});
return Promise.all([left_label, right_label]);
}
getLabelValues().then(function(results){
//This is run when the promises are resolved
//access the return data like below
var left_label = results[0];
var right_label = results[1];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6793 次 |
| 最近记录: |