有的接口只能传单个参数,需要多次调用接口可以:

    1. // 使用 Promise.all
    2. async getApi() {
    3. const arr = [1,2,3,4]
    4. let res = await Promise.all(
    5. arr.map(item => {
    6. return api({ params: item })
    7. })
    8. )
    9. console.log('res', res)
    10. }

    另外,map() 是无法中断循环跳出的,有需要中断只能改用for循环。

    arr.map(async) 是并发,所有任务都是同步发出去,但是每一个 map 循环里面的 await 会单独暂停。
    for(await) 是遇到一个 await 就暂停执行,任务都是异步,做完才会下一个任务。

    1. <template>
    2. <div class="hello">
    3. 异步处理
    4. </div>
    5. </template>
    6. <script>
    7. import dayjs from 'dayjs'
    8. export default {
    9. name: 'awaitStep',
    10. data(){
    11. return {
    12. arr: [0, 1, 2, 3, 4, 5]
    13. }
    14. },
    15. mounted(){
    16. this.run()
    17. this.run2()
    18. },
    19. methods:{
    20. delay(number){
    21. return new Promise((resolve) => {
    22. setTimeout(() => {
    23. console.log(dayjs(Date.now()).format('YYYY-MM-DD HH:mm:ss'))
    24. resolve(number)
    25. }, 1000)
    26. })
    27. },
    28. async run() {
    29. for (let i = 0; i < this.arr.length; i++) {
    30. const num = await this.delay(i)
    31. console.log('for', num)
    32. // 思考一下 num 打印的时间
    33. }
    34. },
    35. async run2() {
    36. this.arr.map(async(i) => {
    37. const num = await this.delay(i)
    38. console.log('map', num)
    39. })
    40. }
    41. }
    42. }
    43. </script>

    可以看出map在页面一出现就log出了五条数据,而for await 是异步依次打印出五条数据。
    image.png