javasciptのpromiseでチェーン処理を行いたいのですが、順番通りになりませんでした。
・処理1(setTimeoutループ)
・処理2(setTimeoutループ)
・処理3(end)
の順番に処理をしたいのですが、処理2と処理3の順番が入れ替わりました。
仕様なのでしょうか。
promiseの中にpromiseを書いても良いのですが、それだとチェーンの意味が無い様な。
javascript
1 2/////////////////////////////////////////////////// 3// 4// onLoad 5// 6/////////////////////////////////////////////////// 7$(window).on('load',function(){ 8 9 /////////////////////////////////////////// 10 // 11 // 処理1 12 // 13 /////////////////////////////////////////// 14 var promise = new Promise(function(resolve, reject) { 15 16 //リクエスト配列 17 var aryRequest = []; 18 19 //データ数 20 var numData = 0; 21 22 //データ 23 var aryData = ["data1", "data2", "data3", "data4", "data5"]; 24 25 //データループ 26 aryData.forEach(function(data) { 27 28 // 29 window.setTimeout(() =>{ 30 31 //表示 32 console.log("shori1 " + numData + " " + data); 33 34 //登録 35 aryRequest.push("reqest_" + data); 36 37 //更新 38 numData++; 39 40 //終了 41 if(numData == aryData.length){ 42 resolve(aryRequest); 43 return false; //break; 44 } 45 46 }, 1); 47 }); 48 49 }); 50 51 52 /////////////////////////////////////////// 53 // 54 // 処理2 55 // 56 /////////////////////////////////////////// 57 promise.then(function(value) { 58 59 //リクエスト 60 var aryRequest = value; 61 62 //リクエスト数 63 var numRequest = 0; 64 65 //リクエストループ 66 aryRequest.forEach(function(request) { 67 68 // 69 window.setTimeout(() =>{ 70 71 //処理 72 console.log("shori2 " + numRequest + " " + aryRequest[numRequest]); 73 74 //更新 75 numRequest++; 76 77 //終了 78 if(numRequest == aryRequest.length){ 79 return false; //break; 80 } 81 82 }, 1); 83 }); 84 85 return true; 86 87 }).then(function(value) { 88 89 //表示 90 console.log("end"); 91 92 //プロセスエラー 93 }).catch(function (error) { 94 95 //表示 96 console.log("error"); 97 98 }); 99 100 101}); 102
処理結果
text
1 2shori1 0 data1 3shori1 1 data2 4shori1 2 data3 5shori1 3 data4 6shori1 4 data5 7end 8shori2 0 reqest_data1 9shori2 1 reqest_data2 10shori2 2 reqest_data3 11shori2 3 reqest_data4 12shori2 4 reqest_data5 13
endが先に来る。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/09 10:55
2018/06/09 11:47
2018/06/09 15:38
2018/06/09 15:41 編集
2018/06/10 12:31
2018/06/11 09:36
2018/06/11 09:39
2018/06/11 11:07 編集