2016-10-27 3 views
-2

他の言語では、私は1,2,3の順番で実行される命令に慣れていました。 JSはそのようには機能しません。私は非常にシンプルなJSコードが必要です。命令が1,2,3で実行されることを保証するためには、1回は2,3回、3,1,2回は実行しないでください。JSコードをコールバック

+2

ステップ1:コードを表示します。ステップ2:上記コードの問題を説明する。 –

+0

これはあなたに興味があるかもしれません:https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop。 –

+2

こんにちは、歓迎してStackOverflow!私はあなたを助けたいと思っていますが、[よくある質問をするにはどうすればよいですか?](http://stackoverflow.com/help/how-to-ask)などのヘルプセンターの記事を読んだほうがよいでしょう。 [その他](http://stackoverflow.com/help/asking)を参照してください。しかし、ここにいることをうれしく思います、お父さん。 :) –

答えて

1

JavaScript は、です。他の言語で

function doSomething(x) { 
 
    console.log('did something', x); 
 
} 
 

 
console.log(1); 
 
console.log(2); 
 
console.log(3); 
 

 
doSomething(1); 
 
doSomething(2); 
 
doSomething(3);

+0

私は謝罪します。具体的な問題は、function1から返されたデータをfunction2で使用可能にする必要があることです。関数は順番にSTARTを実行しますが、順番に終了しません。 function1が終了するまで、function2は開始できません。 function1が終了するまで待機する必要があります。それがコールバックが入る場所です。 –

+0

@LawrenceJohnson - あなたは[約束](https://developers.google.com/web/fundamentals/getting-started/primers/promises)を調べることを検討するかもしれません。 –

3

Iは、1,2,3のような順序で実行される命令を使用しました。 JSはそのようには機能しません。

実際には、JavaScriptはと同じようにとなります。

コールバック付きの関数を呼び出して、非同期的に何かをするような音がします。例を試してみましょう。

console.log('1'); 
doSomethingLater(function callback() { 
    // This is my callback code 
    console.log('3'); 
}); 
console.log('2'); 

doSomethingLaterを呼び出すとパラメータとして匿名関数への参照を渡していると、出力は何をやっている1、2、3

になります。 doSomethingLaterは、プログラムが実行されるまでその関数を呼び出すことはありません。

コールバックを無視すると、順番どおりに実行されることがわかります。

console.log('1'); 
doSomethingLater(); 
console.log('2'); 

これら3つのステートメントは、順不同で実行されます。

この点をさらに説明するために、setTimeout()の例を考えてみましょう。ここでは、1秒後に他のコードだけを実行します。 (あなたがsetTimeout()に慣れていない場合は、最初にそれをルックアップし、その後読み続けるためにここに戻って来て行く。)

console.log('1'); 
setTimeout(function() { 
    console.log('3'); 
}, 1000); 
console.log('2'); 

この例では、我々はsetTimeout()後の第2までのコールバックを実行しようとしていません基本的に1秒後に呼び出されますconsole.log('2');