两种异步解决方法详解(带写法和运行结果)

1. 利用promise

三种状态:(不可逆)

pending 初始状态

fulfilled 成功

rejected 失败

代码部分:

new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log(1);
        resolve()
      },1000)
    }).then((res) => {
      setTimeout(() =>{
        console.log(2);
      },2000)
    })

 运行结果:

代码部分:

let p1 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p1');
        resolve()
      },2000)
    })
    let p2 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p2');
        resolve()
      },1000)
    })
    let p3 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p3');
        resolve()
      },3000)
    })
    Promise.all([p1,p2,p3]).then((res) =>{
      console.log('全部完成');
      console.log(res);
    }).catch((err) =>{
      console.log('失败');
      console.log(err);
    })

 运行结果:

 代码部分:

 new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log(1);
        resolve()
      },1000)
    }).then((res) => {
      setTimeout(() =>{
        console.log(2);
      },2000)
    })
    let p1 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p1');
        resolve('p1')
      },2000)
    })
    let p2 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p2');
        resolve()
      },1000)
    })
    let p3 = new Promise((resolve,reject) =>{
      setTimeout(() =>{
        console.log('p3');
        resolve()
      },3000)
    })
    Promise.race([p1,p2,p3]).then((res) =>{
      console.log('全部完成');
      console.log(res);
    }).catch((err) =>{
      console.log('失败');
      console.log(err);
    })

 运行结果:

 

2. 利用 async await

代码部分:

async foo(){

    console.log('foo');

    let res = await this.timeOut()

    console.log(res);

  },

  timeOut(){

    return new Promise((resolve,reject) =>{

      setTimeout(() =>{

        console.log(1);

        resolve('resolved')

      },1000)

    })

运行结果:

总结:

promise.race 有一个请求,不知道什么时候执行,希望这个请求有一个超时时间,超时时间3s,超时时间可以设置定时器,需要用race,如果定时器先执行就是超时,如果返回器先执行,说明请求没有超时。

promise.all 项目中需要全部上传后才能把对应的数据上传到数据库中,返回对应的id。这个就需要用all

async返回值是一个对象。

在小程序端,如何使用 async/await 语法?

把这个 regenerator/runtime.js 文件引用到有使用 async/await 的文件当中。(对应runtime.js文件可私信,文件格式是固定的,适用于项目。博客暂无法上传)

import regeneratorRuntime from '../../utils/runtime.js'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值