微信小程序——Promise异步简化回调,简易回调,代理接口回调,await的用法,匿名函数

1、Promise异步简化回调

使用的背景:同时存在两个或者多个网络请求,且第二个请求要使用第一个请求返回的数据

代码:

const app = getApp()

Page({
  data: {

  },
  onLoad: function () {
    this.function_1().then(res=>{
      console.log('方法1结果:',res)

      //这里可以把结果放到GetUserEntity_2作为参数
      this.function_2().then(res=>{
        console.log('方法2结果:',res)
      })

    }
    )
  },
  
  function_1() {
    return new Promise(function (resolve, reject) {

      // 这里的延时可以换为网络请求
      setTimeout(function () {
        let result = '服务器返回的结果11';
        resolve(result) ;

        // 失败时用reject返回
        // reject(result)

      }, 3000) //延时


    })     
  },

  function_2() {
    return new Promise(function (resolve, reject) {

      // 这里的延时可以换为网络请求
      setTimeout(function () {
        let result = '服务器返回的结果22';
        resolve(result) ;
      }, 3000) //延时

    })
  },


})

2、简易回调

app.js

App({
  onLaunch() {
    
  },
  test(readyCallback){
    this.readyCallback=readyCallback
    this.readyCallback("res")
  },

  globalData: {
    readyCallback:null
  }
})

index.js

const app = getApp()
// const aa = app.globalData.aa
Page({
  data: {

  },
  onLoad() {
    
    app.test(
      (res) => {//回调函数
        console.log("回调函数jjj")
      }
    )

  },


})

3、代理接口回调

场景:有多个回调接口的时候使用
代码接口图为:
在这里插入图片描述

app.js代码

//'mark' of undefined 报错,解决方法:需要增强编译
import AA from './utils/aa'
App({
  onLaunch() {
    const aa = AA.aaBuild
    this.globalData.aa = aa
    this.globalData.aaDelegateInterface = AA.aaDelegate
  },
  globalData: {
    aa: null, //蓝牙SDK
    aaDelegateInterface: null,//蓝牙代理接口
  }
})

aa.js代码

// 代理接口
const aaDelegate = () => {
  console.log("aa初始化代理接口==aaDelegate")
  return {
    // aaa1(){},//可有可无,没有也能触发回调
  }
}

const AASdk = function () {
  console.log("==初始化const AASdk==")
  // this._aaDelegate = aaDelegate()//代理方法,增加这个方法的话会触发两次第三行代码:console.log("aa初始化代理接口==aaDelegate")
}

// 给外部调用的方法
AASdk.prototype.test = async function (device) {
  console.log("==测试方法test==")
  const that = this
  setTimeout(() => {
    that._aaDelegate.aaa1()//调用回调方法
  }, 2000);
  
}

module.exports = {
  aaDelegate,
  aaBuild: new AASdk()
}

index.js代码

const app = getApp()
const aa = app.globalData.aa
Page({
  data: {
    
  },
  onLoad() {
    this.setAaPageDelegate() // 设置代理接口
    aa.test("22")//调用
  },

  // 设置代理接口
  setAaPageDelegate() {
    const aaDelegate = app.globalData.aaDelegateInterface()
    aa._aaDelegate = aaDelegate
    aaDelegate.aaa1=this.aaa1
  },

  //回调方法
  aaa1() {
    console.log("触发回调333")
  },
})

代码下载地址:https://download.csdn.net/download/wy313622821/15651468

4、await的用法

async onLoad() {
    //匿名函数 ( () => {//函数代码 }),( () => {//函数代码 })()执行匿名函数
    console.log("测试输出22")
    const aa = await this.test()
    console.log(aa)
    console.log("测试输出33")//测试结果:要等上面的await运行结束才会执行

  },

  test() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("你好")
      }, 2000);
    })

  }

运行结果:测试输出33 要等上面的await运行结束才会执行

5、匿名函数

 ( () => {//函数代码 }),  //匿名函数
 ( () => {//函数代码 })()   //表示执行匿名函数

6、多个异步的合并

const pro1 = new Promise((resolve, reject)=>{resolve(1);});
const pro2 = new Promise((resolve, reject)=>{resolve(2);});
const pro3 = new Promise((resolve, reject)=>{resolve(3);});
 
//三个数据请求
Promise.all(pro3 ,pro2 ,pro1 ).then(
    (data) => {  
        //把三个异步请求返回数据合成一个数组
        //返回数据的顺序和`all()`里面的异步参数顺应一致
        console.log(data);  // [3,2,1]
    },
    error(err)
).catch(e =>{})
 .finally(()=>{})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wy313622821

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值