コールバックと非同期の意味を理解していますが、ノードで非同期関数を実行する方法がわかりません。Nodejsが同期または非同期を知っている方法
例えば、どのようにこの
var action = (function(data) {
result = data+1;
return result;
});
http.createServer(function (req, res) {
var r = action(5);
res.end(r.toString());
}).listen(80);
からこの
var action = (function(data,callback) {
result = data+1;
callback(result);
});
http.createServer(function (req, res) {
action(5, function(r){
res.end(r.toString());
});
}).listen(80);
違うのですか?
私はそれを非同期的にやっていると思いますが、ノードは同期や非同期をいつどのように知っているのか分かりません。同期モードではvar x = func(data);
を実行していますか?
また、同期または非同期を使用するタイミングは?明らかに、+1を追加するときにそれを使用したくないので... IOタスクを実行するとき(例えばDBからの読み込み)に非同期を使用することはOKですか?
たとえば、ライブラリ暗号を使用して短い文字列(最大50文字)を暗号化していますが、この場合は既に非同期を使用しているはずです。
私はいくつかのことをする関数を持っているとし、それがメインループをブロックしないように '背後に'実行したいとしたら、私はコールバックアクションを実行したいそれから私は何をすべきですか? 0msでタイムアウトを設定しますか? –
@CarlosNavarroはおそらく['setImmediate'](https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg)です。しかし、それを使っても奇妙なことにイベントループをブロックするわけではないことに注意してください。結局、JSはシングルスレッドなので、一度に1つのことしか "行う"ことができません。 – robertklep