我应该如何编写简单的顺序 GET
How should I write simple sequential GETs?
Node.js 和 redis 看起来很热,但我被烧伤了。我无法优雅地克服看似非常简单的任务:
给定 3 个数字,检查前两个是否大于 10。如果是,请打印第三个数字。
我确实用这个相当滑稽的脚本完成了这个任务:
var http = require("http");
var redis = require("redis");
client = redis.createClient();
http.createServer(function(request, response) {
client.SET("key1", "11");
client.SET("key2", "9");
client.SET("key3", "3");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello'n'n");
client.GET("key1", function(err, reply) {
response.write(reply + "'n'n");
if(parseInt(reply) > 10) {
client.GET("key2", function(err, reply) {
response.write(reply + "'n'n");
if(parseInt(reply) > 10) {
client.GET("key3", function(err, reply) {
response.write(reply + "'n'n");
response.end();
client.end();
});
} else {
response.end();
client.end();
}
});
} else {
response.end();
client.end();
}
});
}).listen(8000);
我注意到的几件事是:
- 每次我想要一个新的 GET 时都需要嵌套吗?
-
response.end()
需要打电话到某个地方才能出现write
。如何避免在else
块中重复它们?
然后我尝试了这种查询数据库的方式:
http.createServer(function(request, response) {
client.SET("key1", "11");
client.SET("key2", "9");
client.SET("key3", "3");
var key1 = 0;
var key2 = 0;
var key3 = 0;
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello'n'n");
client.GET("key1", function(err, reply) {
response.write(reply + "'n'n");
key1 = parseInt(reply);
});
client.GET("key2", function(err, reply) {
response.write(reply + "'n'n");
key2 = parseInt(reply);
});
client.GET("key3", function(err, reply) {
response.write(reply + "'n'n");
key3 = parseInt(reply);
});
response.write(key1 + "'n'n");
response.write(key2 + "'n'n");
response.write(key3 + "'n'n");
response.end();
client.end();
经过一些阅读和思考,我的解释是代码在异步 GET 返回之前到达 response.write
,然后关闭响应,因此内部写入永远不会发生。至少我从第一个示例中注意到可以轻松调用 SET,但我不知道(似乎并不重要)它们是否真的按该顺序设置。
所以,也许我正在做一些不适合节点和 redis 的事情。我一定错过了一些基本和明显的东西。我需要做什么才能升级?
或者告诉我我必须回到PhpMyAdmin:(
看看异步它可以帮助你组织你的代码https://github.com/caolan/async希望这有帮助
相关文章:
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 有没有一种方法可以防止img get请求使用css或js发生
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 按顺序添加和删除类
- 按我自己的类克隆另一个元素的内容和顺序
- CORS-重定向到第二个GET正在接收的页面
- Javascript-根据赋值顺序,按键合并对象数组
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- querySelector/getElementByClassName嵌套项的顺序
- jQuery Ajax GET请求工作不正常
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 返回/从Twit's客户端.get
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 如何在router.get()方法中传递url作为参数
- 使用Q.js按顺序返回循环的GET请求
- 当列表长度未知时按顺序调用 http.get
- 我应该如何编写简单的顺序 GET
- 在循环数组时使用jQuery .get()添加的元素在页面刷新时以不同的顺序加载
- AngularJS使用$http.get请求按特定顺序传递params数据