1) 同期処理と非同期処理
Promiseオブジェクトを知る前に、まず同期処理と非同期処理の違いをおさらいしましょう。
同期処理
ひとつの処理が終了してから次の処理に進むプロセスの事です。JavaScriptの通常の動作ですね。
var list = [];
// 配列に値をセットする
function taskA(){
for (var i=0; i<10; i++) {
list.push(i);
}
}
// 配列の要素を変更する
function taskB(){
for (var i=0; i<10; i++) {
list[i] = list[i] * list[i];
}
}
// taskAが終了してからtaskBが処理される
taskA();
taskB();
console.log(list);
// [0,1,4,9,16...]
通常の処理は同期処理で十分です。しかしサーバーのレスポンスを待って次の処理に進む場合はどうでしょうか。レスポンスは1秒後かもしれないし、1分後かもしれません。いつだか分からないけどレスポンスが返って来たときに次の処理に進みたい、このような場合に非同期処理の出番になります。
非同期処理
処理の終了を待たないまま別の処理が進む事を言います。例としてjQueryのgetを見てみましょう。
function taskA(){
$.get(
'http://example.co.jp/resource/1',
function (response){
console.info('one');
})
;
}
function taskB(){
console.info('two');
}
taskA();
taskB();
// コンソールに'two' 'one'の順に出力される
taskA()
は$.get()
を実行するとすぐに終了します。次に実行されるのはtaskB()
です。$.get()
に渡したコールバックが実行されるのは、サーバーからレスポンスが返った時です。
この場合taskA()
は非同期処理、taskB()
は同期処理で実行されています。