前提・実現したいこと
javascript(jquery)にて、あるまとまった非同期処理を実行させ、全ての処理が成功すればresolveさせ、途中でうまくいかなければ、その時にrejectさせ、後続の処理をさせないようにしたいです。
発生している問題・エラーメッセージ
ajax処理がうまくいかなかった場合の処理をイテレータの回数分実行した後rejectされてしまう。
該当のソースコード
javascript
1let func = function(){ 2 return new Promise(function (resolve, reject){ 3 for(let i = 0; i < 10; i++){ 4 $.ajax({ 5 url: 'http://', 6 type:'Get' 7 }).done(function(response, status, jqXHR) { 8 console.log("成功"); 9 }).fail(function(jqXHR, status, error) { 10 console.log("エラー"); 11 reject("rejectされました"); 12 }); 13 } 14 resolve(); 15 }); 16} 17 18func().then(function(){ 19 console.log("終了"); 20}) 21.catch(function (error) { 22 console.log(error); 23});
試したこと
return
を記述する
javascript
1let func = function(){ 2 return new Promise(function (resolve, reject){ 3 for(let i = 0; i < 10; i++){ 4 $.ajax({ 5 url: 'https://', 6 type:'Get' 7 }).done(function(response, status, jqXHR) { 8 console.log("成功"); 9 }).fail(function(jqXHR, status, error) { 10 console.log("エラー"); 11 reject("rejectされました"); 12 return; 13 }); 14 } 15 resolve(); 16 }); 17} 18 19func().then(function(){ 20 console.log("終了"); 21}) 22.catch(function (error) { 23 console.log(error); 24});
- 結果
変化なし
break
を記述する
javascript
1let func = function(){ 2 return new Promise(function (resolve, reject){ 3 for(let i = 0; i < 10; i++){ 4 $.ajax({ 5 url: 'https://', 6 type:'Get' 7 }).done(function(response, status, jqXHR) { 8 console.log("成功"); 9 }).fail(function(jqXHR, status, error) { 10 console.log("エラー"); 11 reject("rejectされました"); 12 break; 13 }); 14 } 15 resolve(); 16 }); 17} 18 19func().then(function(){ 20 console.log("終了"); 21}) 22.catch(function (error) { 23 console.log(error); 24});
- 結果
SyntaxError: Illegal break statement
というエラーが発生
補足情報(FW/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/27 06:54