JS学习---promise

一,promise介绍

特点:有三个状态

pending(正在进行)

fulfilled(已经成功)

rejected (已经失败)

结果只有两种可能:

pending(正在进行)到 fulfilled(已经成功) --成功---resolve

pending(正在进行)到 rejected (已经失败)---失败---reject

接收一个回调函数 里面有两个参数

setTimeout(function () {
            console.log(1);
            setTimeout(function () {
                console.log(2);
                setTimeout(function () {
                    console.log(3);
                    setTimeout(function () {
                        console.log(4);
                    }, 4000)
                }, 3000)
            }, 2000)
        }, 1000)

上图是定时器嵌套产生的回调地狱。

promise产生之前是使用回调函数来处理异步的,循环嵌套会产生回调地狱

解决回调地狱

const p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log(1);
resolve(2)
}, 1000)
})

p.then(function (value) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
    console.log(value);
    resolve(3)
}, 2000)
})
}
).then(
function (value) {
return new Promise(function (resolve, reject) {
    setTimeout(function () {
        console.log(value);
        reject(4)
    }, 3000)
})
}
).then(
function (value) {
return new Promise(function (resolve, reject) {
    setTimeout(function () {
        console.log(value);

    }, 3000)
})
}, function (error) {
return new Promise(function (resolve, reject) {
    setTimeout(function () {
        console.log('失败'+error);

    }, 3000)
})
}
)

二,promise方法

1,Promise.then()方法和Promise.catch()方法

前者是捕获成功的函数,后者是捕获失败的函数。

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

catch()相当于then(undefined,function())或者then(null,function())。

const p = new Promise(function (resolve, reject) {
        reject(2)
})
p.then(function (value) {
 console.log(value)
}
).catch(function(error){
    console.log(error +'出错');
})

promise的状态不会一经确定就不会改变了。

const p = new Promise(function (resolve, reject) {
reject(2)
resolve(6)
})

p.then(function (value) {
console.log(value);
resolve(3)
}
).catch(function (error) {
console.log(error + '出错');
})
//输出2出错了

2,Promise.all()方法

Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.all([p1, p2, p3]);

p的状态由p1、p2、p3决定,分成两种情况。

(1)只有p1、p2、p3的状态都变成fulfilled(成功),p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被rejected(失败),p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

3,Promise.finally()

finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。

4,Promise.race()

方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

const p = Promise.race([p1, p2, p3]);

p的状态由p1、p2、p3的状态那个先锁定而决定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值