Promise

首先知道他的意义,
前端有一个东西叫做:回调地狱
其实就像咱们的jQuery当中

你想用A的东西,必须在A的里面才能用!
外面的同级根本拿不到A的里面值
而Promise就是为了让同级也能拿到里面而诞生的
image.png

同步:说白了就算是做完这步下一步!比如食堂打饭,只有第一个把饭拿走,后面的人才可以下一个领饭

异步:异步非阻塞,阻塞就相当于去买火车票没带身份证.此时这个人让出来你们先,等会我拿到身份证再插进去

new Promise里面放函数,函数里面显示两个值,一个是成功一个是失败!里面的name放到你的成功里!然后找then就是你的值了

var ks = new Promise((resolve, reject)=>{
    setTimeout(()=>{
        var name = 'Aaron'
        resolve(name)
        reject('失败的一句话')
    }, 1000)
})

p.then((data)=>{
    console.log(data)
}).catch(err=>{
    console.log(err)
})

在深入一些,如果是数据的话怎么显示出来

var ks = new Promise((resolve, reject)=>{
    $.ajax({
       type:"get",
       url:"www.xxoo.cn/xxx?id=123456",
       success:function(res)
       {
           resolve(res)
       }
    })
})

p.then((data)=>{
    console.log(data)
})

Promise.all这个更方便,可以放多个用all包起来!但是如果有一个失败就会返回一个失败信息

var a = new Promise((a, b) => {
    a('成功1')
})


var b = new Promise((a, b) => {
    a('成功2')
})


var c = Promise.reject('失败货色')

Promise.all([a, b, c]).then(res => {
    console.log(res)
}).catch(err => {
    console.log(err)
})

Promise.race跟楼上有点相似,只不过这个是赛跑型的!谁加载完的最快!我就先显示谁比如1234!3是最快的,所以显示的时候顺序是3214。
而all是拿到所有1234再一起显示

var a = new Promise((a, b) => {
    a('成功1')
})


var b = new Promise((a, b) => {
    a('成功2')
})


Promise.race([a, b, c]).then(res => {
    console.log(res)
}).catch(err => {
    console.log(err)
})

async和await

其实跟promise有着缠缠绵绵的效果如果没有async就直接返回一句话“呵呵”

function fx()
{
   return '呵呵'
}
console.log(fx())

但是有了他仿佛是获得数据一样变成promise出现

async function fx()
{
   return '呵呵'
}
console.log(fx())

而awair是什么呢?其实他是阻塞!你拉屎的时候:如果卡住开头后面的也拉不出来!
他就相当于第一个async(大脑)获取出一个通知(你该拉屎了)
此时在另一个async(大肠)说好的,我要拉出来了
但是如果async(大脑)说我还没有做好心理准备
那个async(大肠)就会忍着不拉,弄得后面的憋着喘不过气
但是非阻塞!厕所是公用的,这个人愿意等就等,你将会被跳过!下一个async将会正常运行

async function nao()
{
     return new Promise((resolve, reject)=>{
         setTimeout(()=>{
            resolve('等999999再拉')
         }, 999999)
     })
}

async function chang()
{
     var a = await nao()
     console.log(a)
     console.log('忍着才能拉出去')
}

还有一种失败的方法之前的是p.then().catch()
而在这里是try{}catch(err){}
而且只要这里错误,后面的123456就不会被显示

async function nao()
{
     return Promise.reject('失败者')
}

async function chang()
{

     try{
        var a = await nao()
        console.log(a)
     }catch(err)
     {
        console.log(err)
     }
     console.log(123456)
}

赵不悔
96 声望4 粉丝

我以为租来的人生也能幸福…要不是幸福终究有个期限,我也就信了。