首页 > 其他分享 >Prominse的静态方法,Prominse.then的返回值,Prominse的三种状态,async函数,同源策略,get和post传参的区别

Prominse的静态方法,Prominse.then的返回值,Prominse的三种状态,async函数,同源策略,get和post传参的区别

时间:2022-12-05 14:36:14浏览次数:45  
标签:传参 resolve console log res Promise Prominse 静态方法 const

Prominse的静态方法

有两种静态方法:

all和race两种方法,all是返回全部的参数,race是返回最快的参数

<script>
    function timeoutPro(delay) {
        return new Promise((resolve, reject) => {
            // 根据成功  resolve then
            setTimeout(() => {
                resolve(`延迟了${delay}秒执行`)
            }, delay * 1000)
        })
    }
    // 创建多个Promise对象
    // p1,p2,p3 Promise对象
    const p1 = timeoutPro(2)
    const p2 = timeoutPro(3)
    const p3 = timeoutPro(4)
    const p4 = timeoutPro(9)
    console.log(p1,p2,p3,p4)
    /*
      1. Promise.all 等待传入的Promise数组,每一项 都完成
      2. 每一个Promisethen的结果,挨个的设置给res
      3. res-->array
      4. all 所有,等所有
    */
    // Promise.all([Promise实例化对象,对象1,对象2])
    Promise.all([p1,p2,p3,p4])//调用所有的Promise对象
        .then(res => {
            console.log(res)
        }) //如果有一个有问题就回去进入err中
    /*
      1. Promise.race 等待传入的Promise数组,第一个 完成就触发then
      2. then中获取到的是 第一个完成Promise对象的then中的值
      3. race 竞赛,等第一
    */
    Promise.race([p1,p2,p3,p4])//调用最快的Promise对象
        .then(res => {
            console.log(res)
        }) //只返回最快的那个接口

</script>

Promise和Promise相结合的接口

<script>
    function myAxios(option) {
        // 获取传入的属性
        const { url, method = 'get', data } = option
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest()
            // 调用 新闻接口
            xhr.open(method, url)
            // 设置 请求头 内容格式为JSON
            xhr.setRequestHeader('content-type', 'application/json')
            xhr.addEventListener('load', function () {
                // console.log('load:', xhr.response)
                // 通过 resolve 将成功的结果传递给then
                resolve(JSON.parse(xhr.response))
            })
            // 发送  JSON
            xhr.send(JSON.stringify(data))
        })
    }
    const p1 = myAxios({
        url : `http://ajax-api.itheima.net/api/news`, //获取新闻表单
        method : `GET`,
    })
    const p2 = myAxios({
        url : `http://ajax-api.itheima.net/api/books`, //获取图书列表
        method : `get`,
    })
    const p3 = myAxios({
        url : `http://ajax-api.itheima.net/api/area?pname=河南省&cname=南阳市`,
        method : `get`,
    })
    // 1.测试多个接口
    // 新闻 图书接口 英雄接口
    Promise.all([p1,p2,p3]).then(res => {
        console.log(res)
        console.log(res[0])
        console.log(res[0].data)
        console.log(res[2])
        console.log(res[2].data)
    }).then(err => {
        console.log(err)
    })
</script>

Promise.then返回值

<script>
    function time(a) {
        return new Promise ((resolve, reject) =>{
            setTimeout(() => {
                resolve(a)
            },1000)
        })
    }
    const  result = time(1).then(res => {
        console.log(res)
        return time(2)
    }).then(res1 => {
        console.log(res1)
        return 1
    }).then(res2 => {
        console.log(res2)
    }).then(res3 => {
        console.log(res3)
    })
</script>

Prominse中reject和catch这两个方法

<script>
    function randomPro() {
        return new Promise((resolve, reject) => {
            // 延迟 1s
            setTimeout(() => {
                // 随机数
                // Math.random() 0-1的小数
                // * 100 控制范围
                // parseInt 转整数
                const num = parseInt(Math.random() * 100)
                if (num > 0 && num < 50) {
                    resolve('成功啦:' + num)
                } else if (num >= 50 && num <= 100) {
                    reject('失败啦:' + num)
                }
            }, 10)
        })
    }
    /*
      1. then的第二个参数在失败时触发(如果写了的话)
      2. catch的本质 就是调用了then 传递勒第二个参数
    */
    randomPro().then(
        res => console.log('res:', res),
        err => console.log('err:', err),
    ).finally(() => {  //重点,不管成功或者失败,都会走我这里-
        console.log(`成功或者失败都要走我这里`)
    })
</script>

Promise的三种状态

<script>
    function randomPro() {
        return new Promise((resolve, reject) => {
            // 延迟 1s
            setTimeout(() => {
                // 随机数
                // Math.random() 0-1的小数
                // * 100 控制范围
                // parseInt 转整数
                const num = parseInt(Math.random() * 100)
                if (num > 0 && num < 50) {
                    resolve('成功啦:' + num)
                } else if (num >= 50 && num <= 100) {
                    reject('失败啦:' + num)
                }
            }, 10)
        })
    }
    /*
      1. then的第二个参数在失败时触发(如果写了的话)
      2. catch的本质 就是调用了then 传递勒第二个参数
    */
    // 保存下来 方便后续查看
    const p = randomPro()
    console.log(`初始化状态`,p)
    p.then(res => {
        console.log(res)
            console.log(`成功状态`,p)
        },
        err => {
            console.log(`失败状态`,p)
        }
    ).finally(function () {
        console.log(`我是什么状态`,p)
    })
</script>

eventloop,事件循环(宏任务,微任务)

先执行主线程代码,然后执行微任务,最后执行宏任务。如果宏任务中还有其他微任务,则继续执行宏任务中的微任务

script是最大的宏任务,先执行(同步任务,微任务,宏任务)

new Promise{(里面就是同步任务)}

.then是微任务

setTimeout()setInterval()这两个属于宏任务

<script>
    // 宏任务
    setTimeout(function () {
        console.log(1)
    })
    new Promise(function (resolve, reject) {
        console.log(2)
        resolve(3)
    }).then(function (val) {
        // 微任务
        console.log(val) // 3
    })
    console.log(4)
</script>

 

标签:传参,resolve,console,log,res,Promise,Prominse,静态方法,const
From: https://www.cnblogs.com/hgng/p/16952175.html

相关文章

  • 了解原生ajax传递参数和prominse概念
    使用原生ajax向后端发送get请求<h2>原生ajax</h2><button>原生发送请求</button><script>document.querySelector('button').onclick=function(){//1.实......
  • 小程序的事件传参
         ......
  • sql-lab 8-17 盲注加post传参
    布尔型盲注length()函数返回字符串的长度?id=1'and(length(database()))=8--qwesubstr()截取字符串(语法:SUBSTR(str,pos,len);)?id=1'and(ascii(substr(database......
  • 初识ajax初次使用get,post传参
    浅了解http和httpsHTTP协议以名文的方式发送内容,不会提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如(信用卡号,密码等支付信息)HTTPS则是具有安全性的ssl加密......
  • Python高级-静态方法和类方法的根本区别-笔记
    1.类属性、实例属性它们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,实例属性属于对象类属性属于类classProvince(object):#类属性country='......
  • kotlin 单例、静态方法、常量
    一、object使用object关键字定义一个单例类,通过单例类,去调用方法,这种方法也不叫静态方法,但是可以当作静态方法调用/***object*天生单例*1并不用语法上面初......
  • body传参和query传参
    get请求只能传query参数,query参数都是拼接在请求地址上的。post可以传body和query两种形式的参数。get请求在url中传送的参数是有长度限制的,而post没有限制。get比post更......
  • Object的静态方法
    Object的静态方法<body><script>letobj={name:"lw",age:6,sex:"未知",};//Object的静态方法//1......
  • Fragement传参
    使用bundle进行参数传递Bundlebundle=newBundle();bundle.putString("key","这是方法二");demoFragment.setArguments(bundle);在另外一个Fragment获取参数的方式......
  • python-面向对象- 实例方法,类方法,静态方法, 类属性
    名称定义方法权限调用方法实例方法第一个参数必须是示例,一般命名为self可以访问实例的属性和方法,也可以访问类的实例和方法一般通过示例调用,类也可以调用类方法......