1

Node.js と redis は熱く見えますが、私はやけどを負っています。非常に単純なタスクのように見えるものを優雅に克服することはできません。

3 つの数値が与えられた場合、最初の 2 つの数値が 10 より大きいかどうかを確認します。そうであれば、3 番目の数値を出力してください。

私はこのかなりコミカルなスクリプトでこのタスクを達成しました:

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()writes を表示するには、どこかで呼び出す必要があります。elseブロック内でそれらを繰り返さないようにするにはどうすればよいですか?

次に、このスタイルの DB クエリを試しました。

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();

いくつか読んで考えた後、私の説明はresponse.write、非同期GETが返される前にコードがsに到達し、その後応答が閉じられるため、内部書き込みが発生しないということです。少なくとも、最初の例から、SET を簡単に呼び出すことができることに気付きましたが、実際にその順序で設定されているかどうかはわかりません (問題ではないようです)。

というわけで、nodeやredisにふさわしくないことをしているのかもしれません。そして、基本的で明白な何かが欠けているに違いありません。レベルアップするにはどうすればいいですか?

または、PhpMyAdmin に戻らなければならないと言ってください :(

4

1 に答える 1

3

コードを整理するのに役立つ async を ご覧ください https://github.com/caolan/async これがお役に立てば幸いです

于 2012-04-17T00:09:43.363 に答える