2016-03-18 12 views
-3

私は特に問題はありませんが、私は自分の疑問について他の人から意見を得たいと思います。私は先進的な開発者ではないので、私が言うことが愚かであるか完全に間違っているならば、私を訂正してくれることを躊躇しないで、私はここで学びます。非同期プログラミング(NodeJS)の使用

私は最近NodeJSをたくさん使っていますが、もちろん、ほとんどのコードは非同期で書かれています。しかし、私はいくつかのことについて考えるようになりました。

私は、非同期コードではなく非同期コードを書いたときに、読みやすいコードを書くのは難しいです。また、多くの場合、ネストされたコールバックがたくさんあります。後で私は約束を学んだが、それはすべてを改善すると思うが、約束があっても、私が書いたコードは、維持するのが難しく、エラーを起こしやすいような気がする。

多くの時間、私はむしろ同期呼び出しをしたいと思いましたが、ライブラリは非同期インターフェイスを提供するだけなので、非同期呼び出しを使用することを余儀なくされました。例えば、非常に頻繁に、私はデータベースからデータを取得する必要があり、データベースを照会するための非同期コードを書くことになります。あるいは、別の状況では、サーバーに要求する必要があります(例えば、 )しかし、これらの状況では、自分の応答を送る前にデータを取得する必要があります(データベースやトークンなどからデータを取得する必要があるため、私は待つ必要があります)。しかし、私は同期コードがより自然で読みやすいように感じる間に、非同期コードを強制的に書き込むことになります。

NodeJSでは、同期呼び出しでメインスレッドをブロックすべきではないので、非同期プログラミングが唯一の方法だと思います。しかし、NodeJSを落として、同期コードを書くことができるかどうか、NodeJSについて忘れてしまったことがあるかどうかを知りたいです。

+2

I/Oはほとんど常に非同期です。たとえそれを同期して実行することができたとしても、スケールされません。 Webブラウザがシングルスレッドで、同期I/Oを実行するとします。私はファイルをダウンロードしている間はブラウザーを使用することができません(Webサイトの読み込み速度が遅く、応答が遅いとは言えません)。何をするかは、あなたが構築しているものに完全に依存します。しかし、非同期プログラミングに慣れて学習することは確かに有益です。 –

+0

@Matあなたが読むのが難しいあなたのコードの一部を表示してもよろしいですか? –

答えて

1

言語またはフレームワークの選択は、使用例に基づいて行われます。選好は後に来るでしょう。たいていの場合、より同期的な指向言語は、維持管理や読み込みがずっと簡単です(私はPythonを見ています)。しかし、例えばこれを取る:

  • あなたは、複数のタスクを完了する必要が何かをする必要があり、あなたは早く結果が欲しいです。確かに、これを同期的なやり方で行うとあなたが遅くなる。最良の方法は、並行処理を組み込んだ言語またはフレームワークでコードを記述することです。NodeJS、Erlang、Go

  • リソースを順番に処理するスクリプトを作成する必要があります。私の意見ではPython、Rubyの、Perlの

、それは良いことだ:これは私の前のシナリオに記載された言語で行うことができますが、それはあなたがより簡単にこれを行い、言語やフレームワークに頼るため、おそらく最善ですNodeJSを学ぶ。あなたは一生の間、一つの言語に固執するべきではないことを忘れないでください。

1

約束があなたの可読性の問題を解決します。

doAsync(data, function(err, result){ 
    doAnotherAync(result, function(err, newResult){ 
     console.log(newResult); 
    }) 
}); 

doPromise(data) 
    .then(function(result){ 
     return doAnotherPromise(result) 
    }) 
    .then(function(newResult){ 
     console.log(newResult); 
    }); 

約束は今ES6の一部であるになります。警告として:彼らはすぐに "明白"ではありません。ペニーが落ちるまでいくつかの例をコードしてください。あなたは喜んだでしょう。 Bluebirdも使用してください。

ノードをあきらめてはいけません。それは本当に美しさです。

1

非同期の世界で問題を解決するには、非同期プログラムが必要です。私たちのインターワーキングされた世界は明らかに非同期です。同期的な方法で何かを待つことを含むプログラムを書くことはできません。同期プログラムと非同期プログラムのどちらを書くかはあなた次第ではありません。問題がこれをあなたのために決めます。

あなたができることは、簡単にできる言語とフレームワークを見つけることです。 JSでは、awaitの非同期関数は、非同期プログラムを、人為的に可能な限り同期的にスタイルに書くことを可能にする進歩です。

+0

非同期の世界であれば、なぜ非同期プログラミングが現場に爆発したように見えますか? – Jodes

+0

@Jodes非同期プログラミングは、 'setTimeout'がNetscape 2に到着し、15年以上前にXMLHTTPRequest/ajaxが導入されて以来ここにあります。 5年前に始まったのと同じように、変化してきたのは、将来の約束事、非同期関数、オブザーバビリティなど、JSのパラダイムを改善したことです。 –

関連する問題