質問失礼いたします。
現在、Vue.jsでアプリを開発中なのですが、API1で取得した番号をAPI2にパラメーターを投げてdataArrayの値を出力したと思っているのですが、axiosの非同期処理を使っている関係で最終的なdataArrayは空の状態となってしまいます。setTimeoutで1秒後にconsole.logすると値が入っています。
setTimeoutを使わずにデータを非同期処理を順番に実行する方法が分からず何か良い方法はございますでしょうか?アプローチ自体間違えていますでしょうか?
javascript
1<script lang="ts"> 2 import { ref } from "#imports"; 3 import axios from 'axios'; 4 5 export default { 6 setup() { 7 let dataArray = ref([]); 8 axios.get( 9 'http://〇〇api1', 10 ).then(response => { 11 let hoge = []; 12 for( let i = 0; i < response.data.ships.length; i++ ) { 13 hoge.push(response.data.ships[i].ship_id); 14 } 15 hoge.forEach(el => { 16 let params = new URLSearchParams(); 17 params.append('user_id', el); 18 axios.post( 19 'http://〇〇api2', 20 params 21 ).then(response => { 22 dataArray.value.push(...response.data.users); 23 }); 24 }); 25 }); 26 // setTimeout(() => { 27 dataArray.value.sort((a, b) => { 28 return a.user_id < b.user_id ? -1 : 1; 29 }); 30 console.log(dataArray.value); 31 // }, 1000); 32 return { 33 ref, 34 dataArray 35 }; 36 }, 37 }; 38</script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/01 12:50 編集
2022/11/01 13:15
2022/11/01 13:52