2017-06-28 8 views
0

私は次のコードがあるとします。パラメータを持つ同期関数を非同期関数(Javascript)として書くにはどうすればよいですか?

同期バージョン:

var waitingToGetValue = heavyProcessingFunc (para1, para2); 
    response.send(waitingToGetValue); 

を私は周りを探してみましたが、私が得たすべてのパラメータを使用せずに機能しました。

非同期の試み:

heavyProcessingFunc(para1, para2, (function(waitingToGetValue){ 
     response.send(waitingToGetValue); 
    }); 

私は関数に2つのパラメータを送信する必要があります。この関数は、応答に送信するために使用する必要がある値を返します。

非同期形式で入力しても問題ありませんか?誰も私にビデオ/ソースを教えてもらえますか?非同期と非同期の違いを簡単に説明できます:過去数日間の多くの資料を読んで、約束、コールバック、そしてそれらの機能の外の値にアクセスしようとしています。 (UIがロックアップして、あなたが待っている間に応答しなくなるため、一般的に悪い)、応答が受信されるまで同期はすべてを意味

+2

が停止します。非同期とは、リクエストが行われている間にコードが処理を続けることを意味します。これは、UIがブロックされないために優れていますが、応答がいつ返ってくるのかわからないという問題が生じます。これがコールバックが必要な理由です。 –

+0

コールバックを受け入れる関数を作っても、非同期にはなりません。関数の機能によって異なります。例えば。 'Array#forEach'もコールバックをとりますが、非同期ではありません。あなたの質問が本当に何であるかはわかりません。 –

+0

「非同期形式」は何も役に立ちません。関数を実際に非同期的に処理させる必要があります。重い処理のラウンド間にわずかな遅延がある場合は、関数を非同期的に処理する必要があります。 – Bergi

答えて

0

function heavyProcessingFunc(para1, para2, callback){ 
 
    \t console.log('We have two params to work with', para1, para2); 
 
    \t setTimeout(function(){// Simulating a long request 
 
    \t \t callback("Now we send the response by calling the callback"); // This is waitingToGetValue 
 
    \t },3000); 
 
    } 
 
    
 
    heavyProcessingFunc("para1", "para2", function(waitingToGetValue){ 
 
     console.log(waitingToGetValue); 
 
     // response.send(waitingToGetValue); 
 
    });

+0

setTimeout(fn、0)を使用すると、asyc – Daniel

関連する問題