4.网络请求 + promise异步编程

2023-10-12  本文已影响0人  LucXion
网络请求 wx : request

1.小程序中只能使用 HTTPS 请求
2.域名必须添加到 '域名信任列表'中
3.开发环境,可以设置开发工具中的 详情 - 本地设置 - 不校验合法域名
小程序内的网络请求,不是跨域请求,也不是ajax请求

/**
默认方法是 GET
请求体 body 内容放在 data 字段中
success 默认接收参数是 result 不是 res
字符串一律用 单引号 ' 引用
*/ 
        wx.request({
          url: 'url',
          method : 'POST',
          data : {
            msg : '念念不忘 必有回响'
          },
          success: (result) => {},
          fail: (err) => {},
          complete: (res) => {},
        })
Promise
instantiatePromise() {
        console.log('1.开始执行')
        /*
        语法:
        Promise( (参数1:resole,参数2:reject) => 闭包 )
        参数1、参数2 都是函数类型的回调,可以传参
        闭包: 内部可执行异步函数,并在合适的时机调用 resole、reject,改变Promise 的状态
        */ 
        new Promise((resole, reject) => {
            console.log('2.实例化Promise后会直接执行闭包,Promise自动进入待定状态')
            setTimeout(() => {
                console.log('5.耗时操作执行完成')
                const success = true
                if (success){
                    resole('6.手动调用resole回调,Promise状态 已兑现')
                } else {
                    reject('7.手动调用reject回调,Promise状态 已拒绝')
                }
            }, 3);
            console.log('3.Promise闭包内的异步操作不会阻塞线程')
        })
        console.log('4.当前函数结束')
    }
// 链式调用
    promiseCallChaining() {

        /*
        1. Promise 有两个回调属性支持链式调用,分别是 then 和 catch,没有finally
        2. funcA 和 funcB 的返回值都是 Promise
        */ 
        this.funcA().then((res) => {
            /*
            这里只有一个可能会执行,即 funcA 的 Promise 最终状态是 已兑现(resolv)
            */ 
            return this.funcB()
        }).catch((msg)=>{
            /*
            Promise的 then 和 catch 具备 switch 的穿透特性,因此执行到当前闭包的路径有两种。所以使用 then 和 catch 并不能很好的处理实际业务中的 成功和失败
            1. funcA-return Promise-reject
            2. funcA-return Promise-resolv && funcB-return Promise-reject
            */ 
        })
    }
// async + await 语法结构
    async simplifyCalling () {
        console.log('1')
        // 用 try 捕获 promise已拒绝态,否则会报错
        try {
            console.log('2')
            const resA = await this.funcA();
            // 如果 funcA 返回的是已拒绝,当前代码块内,下面的代码将不会被执行,而是直接跳转到 catch 代码块内
            console.log('3')
            console.log(resA);

            const resB = await this.funcB();
            console.log('4')
            console.log(resB);

          } catch (error) {

            console.log('5')
            // error 即 reject 的传参
            console.log(error);
          }
          console.log('6')
    }
上一篇 下一篇

猜你喜欢

热点阅读