美文网首页
Promise 和 async + await

Promise 和 async + await

作者: 缘之空_bb11 | 来源:发表于2024-01-07 17:32 被阅读0次

    参考网站:(https://www.jianshu.com/p/f12fd73a7c59)

    1. Promise 作用是什么?

    用来解决异步数据回调的问题.
    在 promise 中有两个回调参数: 回调成功参数 resoved, 回调失败参数 reject

    promise 的基本使用

    var  promise=new Promise(function( resoved, reject){ })
    

    注:这是一个异步操作,其中function 内部写的就是具体的异步操作

    2. 怎么使用

    在链式调用的时候,使用.then 方法为后续的成功或失败的回调提供预定,解决回调异步问题.

    示例:

    getFIiePath(path){
                var  promise= new Promise(function(resolve,reject){
    
                    if (err) {
                     // 数据请求失败回调
                      return reject(err)
                   }
                    
                   // 数据请求成功回调
                    resolve(data){ }
                })
                  return promise;
            },
    
    getFIiePath(xxx_路径).then( succse( data){
            // 数据成功回调
     } , fail(err ){ 
          // 数据请求失败
     } )
    

    流程:
    1. 上一个 .then 中,return 一个新的 promise 实例,可以继续用下一个 .then 来处理
    2.promise 一旦出错,进行捕获,继续执行下去,否则,不会继续执行
    3.如果不想前面的 promise 出错,操作被终止,可以为每个 promise 指定失败的回调捕捉

    1. 工作流程
    图片描述

    3. async + await 实现异步请求同步化

    同步函数:立即执行,完全执行完了才结束,不会放入回调队列中
    异步函数:不会立即执行,会放入回调队列中将来执行

    await关键字(详见下面的代码)后必须跟Promise对象,否则会阻塞之后代码的执行

    示例:

    
                p1() {
                    return new Promise((resolve, rejecte) => {
                        resolve('11111111')
                    })
                },
    
                p2() {
                    return new Promise((resolve, rejecte) => {
                        resolve('222222222')
                    })
                },
    
                p3() {
                    return new Promise((resolve, rejecte) => {
                        resolve('33333333333')
                    })
                },
    
                async show() {
                    let a = await this.p1().then((data, error) => {
                        console.log(data)
                    })
                    let b = await this.p2().then((data, error) => {
                        console.log(data)
                    })
                    let c = await this.p3().then((data, error) => {
                        console.log(data)
                    })
                },
    
             //调用
            this.show()
    
    结果: 
     11111111  
     222222222  
     33333333333  
    

    或者

    getAllClass: () => {
        return new Promise((resolve, reject) => {
            uni.request({
                url: BASE_URL + 'class/getClassList',
                success: (res) => {
                    store.commit('setAllClass', res.data);
                    resolve('suc');
                },
                fail: (err) => {
                    reject('err')
                }
            });
        })
    }
    
    // 调用
    initPage: async function () {
        await api.getAllClass();   // 关键点
        this.getUserClassInfo(this.userInfo.selectedClass);
    }
    
    

    相关文章

      网友评论

          本文标题:Promise 和 async + await

          本文链接:https://www.haomeiwen.com/subject/jnggndtx.html