美文网首页
数组排序、 Promise、跨域

数组排序、 Promise、跨域

作者: 卢卢2020 | 来源:发表于2021-02-18 14:18 被阅读0次

    数组排序

    给出正整数数组 array = [2,1,5,3,8,4,9,5] 

    请写出一个函数 sort,使得 sort(array) 得到从小到大排好序的数组 [1,2,3,4,5,5,8,9]新的数组可以是在 array 自身上改的,也可以是完全新开辟的内存。不得使用 JS 内置的 sort API

    答:

    let sort = (numbers)=>{
        for(let i=0;i<numbers.length-1;i++){
            let index = minIndex(numbers.slice(i))+i

            if(index !== i){
                swap(numbers,index,i)
            }
        }

        return numbers
    }

    //需要辅助swap 和minIndex

    let swap= (array,x,y)=>{
        let temp = array[x]    

        array[x] = array[y]

        array[y] = temp

    }

    let minIndex = (numbers)=>{
        let index =0

        for(let i=1;i<numbers.length;i++){
            if(numbers[i]<numbers[index]){
                index = i
            }
        }

        return index
    }

    sort.call(null,[2,1,5,3,8,4,9,5])


    你对 Promise 的了解?

    ①Promise 的用途:

    答:是为了解决命名不规范、回调地狱使得代码复杂、很难进行错误处理等问题(通俗的说 就是Promise 能规范回调的名字或顺序、拒绝回调地狱、让代码可读性更强、很方便的捕获错误 )

    ②如何创建一个 new Promise(课堂里让大家背过)

    答:

    return new Promise((resolve,reject)=>{
        //内容区  任务成功调用resolve 失败调用reject
    }) 

    ③如何使用 Promise.prototype.then(可查 MDN)

    答: 

    const flag= true

    const promise = new Promise((resolve,reject)=>{
        if(flag){
            resolve('成功了')
        }else{
            reject('失败了')
        }
    })

    promise 

        .then(name=>{ //成功返回then
            console.log(`我的then调用${name}`) 
        })

        .catch(name =>{ //失败返回catch
            console.log(`我的catch调用${name}`)
        })

        .finally(()=>{ 
            console.log(`成功失败都返回`)
        })

    图解 本图摘自视频https://www.bilibili.com/video/BV1QV411a7Hu?t=359

    ④如何使用 Promise.all(可查 MDN)

    答: Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,失败时返回最先被reject失败状态的值

    Promise.all的使用: 

    let  p1 = new Promise((resolve,reject)=>{
        resolve('成功了')
    })

    let p2 = new Promise((resolve,reject)=>{
        resolve('成功了2222222')
    })

    let p3 = new Promise((resolve,reject)=>{
        reject('失败')
    })

    Promise.all([p1,p2]).then(result=>{

        console.log(result)

    }).catch(error=>{

        console.log(error)

    })

    Promise.all([p1,p3,p2]).then((result)=>{
        console.log(result)
    }).catch((error)=>{
        console.log(error) //Promise.all 在任意一个传入的promise失败时返回失败,即有一个立即调用失败函数,那么Promise.all将立即变为失败
    })

    Promise.all 的异步和同步 :

    Promise.all在处理多个异步和同步处理时非常有用,比如说一个页面上需要等两个或者多个ajax的数据回来以后才正常显示,在此之前只显示loading图标

    let wake = time =>{
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(`${time/1000}秒后醒来`)
            },time)
        })
    }

    let p1 = wake(5000)

    let p2 = wake(3000)

    Promise.all([p1,p2]).then((result)=>{
        console.log(result)
    }).catch((error)=>{
        console.log(error)
    })

    需要注意的是,Promise.all 获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的,即p1的结果在前,即便p1的结果获取的比p2要晚,这带来了一个绝大的好处:在前端开发请求数据的过程中 偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景,使用Promise.all毫无疑问可以解决这个问题。

    ⑤如何使用 Promise.race(可查 MDN)

    答:race 谁跑得快执行谁

    let p1 = new Promise(function(resolve,reject){ 

    setTimeout(resolve,500,"one") }) 

    let p2=new Promise(function(resolve,reject){ 

    setTimeout(resolve,100,'two') }) 

    Promise.race([p1,p2]).then(function(value){ console.log(value) })

    跨域

    ①什么是同源

    答:如果两个url的协议、域名、端口号完全一致,那么这两个url就是同源的

           比如:https://baidu.com、https://www.baidu.com不同源 //完全一致才算同源

    ②什么是跨域

    当一个请求的协议、域名、子域名、端口之间任意一个与当前页面url不同即为跨域

    ③JSONP 跨域

    最主要思路让js包含数据

    ④CORS 跨域

    Access-Control-Allow-Origin : http://lulu.com:8880

    详情案例链接

    相关文章

      网友评论

          本文标题:数组排序、 Promise、跨域

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