前提
ajaxによる関数を同期処理と非同期処理を組み合わせてコードを書いています。
そこでthenによる挙動が思い通りにいかないのでご教示いただきたいです。
実現したいこと
実行されるメソッドの順番が
- getData1()
- getData2(id)*10(非同期処理)
- then
となるようにしたいです。
以下のコードを実行すると、1が完了した後に3が実行されてしまいます。2の処理を待ってからthenを実行するにはどのようなコードを書けばよろしいでしょうか。
該当のソースコード
javascript
1const getData1= () => { 2 return new Promise((resolve, reject) => { 3 $.ajax({ 4 type: 'GET', 5 url: URL1, 6 dataType: 'jsonp', 7 data: { 8 menu: menu 9 }, 10 }) 11 .done(function(out){ 12 resolve(out.data) 13 }) 14 .fail(function() { 15 console.log('エラー') 16 reject() 17 }) 18 }) 19} 20 21const getData2= (id) => { 22 return new Promise((resolve, reject) => { 23 $.ajax({ 24 type: 'GET', 25 url: URL2, 26 dataType: 'jsonp', 27 data: { 28 id: id 29 }, 30 }) 31 .done(function(out){ 32 resolve(out.data) 33 }) 34 .fail(function() { 35 console.log('エラー') 36 reject() 37 }) 38 }) 39} 40 41(async () => { 42 await getData1() 43 const ids = [...Array(10).keys()] 44 45 await Promise.all([ 46 ids.map(async (id) => { 47 getData2(id) 48 }) 49 ]) 50 .then(() => { 51 console.log("after promise.all") 52 }) 53})()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/18 06:56
退会済みユーザー
2022/09/18 07:19