您的当前位置:首页正文

promise使用

2024-11-24 来源:个人技术集锦

引用:https://es6.ruanyifeng.com/#docs/promise

    new Promise((resolve,reject)=>{
        var number = Math.random();
        if (number > 0.5){
            resolve("login success resolve")
        }else{
            reject("login fail reject")
        }
    }).then(data=>{
        console.log("login",data)
        return new Promise((resolve,reject)=>{
            var number = Math.random();
            if (number > 0.5){
                resolve("getinfo success")
            }else{
                reject("getInfo reject")
            }
        })
    }).then(data=>{
        console.log("getInfo",data)
    }).catch(err=>{
        console.error("error"+err)
    })
    function login(resolve,reject){
        setTimeout(function () {
            var number = Math.random();
            if (number > 0.5){
                resolve("getinfo success")
            }else{
                reject("getInfo reject")
            }
        },1000)
    }

    new Promise(login).then(success=>{
        console.log(success)
        /**
         * 1. 返回promise
         * 2. 返回字符串,,可以一直 then下去,,, 返回的值,作为下一个then的参数
         * 3. then方法中抛出异常
         */
        return "hehe"
    },err=>{
        console.error(err)
        return "err";
    }).then(data=>{
        throw new Error("出错了")
    }).catch(err=>{
        console.log("error : "+err)
    })

进入catch 代码块:


finally

   new Promise(login).then(success=>{
        console.log(success)
        /**
         * 1. 返回promise
         * 2. 返回字符串,,可以一直 then下去,,, 返回的值,作为下一个then的参数
         * 3. then方法中抛出异常
         */
        return "hehe"
    },err=>{
        console.error(err)
        return "err";
    }).then(data=>{
        throw new Error("出错了")
    }).catch(err=>{
        console.log("error : "+err)
    }).finally(()=>{
        console.log("finally :")
        return new Promise(login)
    }).then(()=>{
        console.log("===========")
    }).catch((err)=>{
        console.log("================",err)
    })

静态方法:

  • Promise.resolve()
  • Promise.reject()
  • Promise.all() : 所有都执行成功
  • Promise.race() : 只要第一个成功或者失败
 var p1 = Promise.resolve("hello promise");
    p1.then(data=>{
        // 不会进入 err ,你声明的是 resolve, 除非在 then中 抛出异常
        console.log("data : ",data)
    }).catch(err=>{

    })


 var p2 = Promise.reject("error reason");

  // 接受多个Promise对象,,只返回一个Promise实例,,等所有的 Promise对象都执行成功完毕,才会进入到then中,
    // 只要有一个 reject 的, 进入 reject
    // 保证多个异步任务同时成功
    Promise.all([new Promise(login),new Promise(login)]).then(data=>{
        console.log(data)
    }).catch(error=>{
        console.log(error)
    })


   // 接受多个Promise,一旦Promise, resolve 或者 reject 就结束
    // 你要请求数据从多个地方拿到,你也不确定,哪个服务是好的,拿到的快
    Promise.race([new Promise(login),99]).then(data=>{
        console.log(data)
    }).catch(error=>{

    })
显示全文