2016-12-31 17 views
0
function firstFunction(_callback){ 
    // do some asynchronous work 
    // and when the asynchronous stuff is complete 
    _callback();  
} 

function secondFunction(){ 
    // call first function and pass in a callback function which 
    // first function runs when it has completed 
    firstFunction(function() { 
     console.log('huzzah, I\'m done!'); 
    });  
} 

これはこのサイトの例です。理解していただきたいと思います。NodeJSでのコールバックの理解

2つの数値を合計し、もう一方の数値を返す関数があるとします。だから:

var z = 0; 
    function firstf (x, y, callback){ 
    z = x + y; 
     callback(); 
    } 
function secondf() { 
    console.log(z); 
} 

これはどのように動作しますか? secondffirstfがコールバックを使用してが完了するまで待つようにするにはどうすればよいですか?再注文あなたのコードによって

答えて

-1

:デモの目的のために

編集製コード非同期

var z = 0; 
 

 
function firstf(x, y, callback) { 
 
    console.log("Inside firstf"); 
 
    z = x + y; 
 
    console.log("Will call callback in 1 second"); 
 
    // Lets make this function async. 
 
    setTimeout(function() { 
 
    console.log("Calling callback"); 
 
    callback(); 
 
    }, 1000); 
 
} 
 

 
function secondf() { 
 
    console.log("Inside secondf"); 
 
    console.log(z); 
 
    console.log("Leaving secondf"); 
 
} 
 

 

 
firstf(1, 2, secondf);

+0

内部は非同期どのようなものですか?もしfirstfが非同期だったらどういう意味ですか? – Marodian

+0

はコードを非同期にしました.1秒遅れ以外の変更はありません。 –

+0

常に1000msを遅らせるのは安全ですか?私は非同期コードを実行しているが、それが終了した後に何か他のものを実行したい場合は、タイムアウト1000を設定するのが良いでしょうか? – Marodian

0

は後を呼び出す、2関数を定義:

firstf(2,3,secondf); 

フォロー:z=2+3次にcallファンクションcallback。そして今、〜secondfcallback機能:

z=2+3 ; 
secondf(); 
0

あなたが最初のブロックが完了するまで待つために、第2ブロックにしたい場合。コールバックを使用することは意味をなさない。 コールバックの主な概念は、非同期プラットフォームを提供することです。

コールバックは、指定されたタスクの完了時に関数呼び出しされるため、最初のブロックがデータのロードに時間がかかる場合に発生する可能性のあるブロッキングを防ぎます。

ブロックが両方とも非同期に動作するようにするには、コールバックを使用し、何を求めているのかを確認するには、ブロック1のタスクが完了した後に2番目の関数を呼び出します。よりよく理解するために

は運のベスト https://docs.nodejitsu.com/articles/getting-started/control-flow/what-are-callbacks/

、このリンクを通過します!

0

あなたはfirstfが完了するまで待機secondfことを確認するために、「約束」という概念を使用することができます。

function firstf(x,y){ 
    return new Promise(
     function (resolve, reject) { 
      resolve(x+y); 
     }); 
} 

function secondf(){ 
    firstf(x,y).then (function (result){ 
     console.log(result); 
    }); 
} 
関連する問題