携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天点击查看活动详情。
Promise 链式调用
Promise三种状态:
1、pending:初始状态,不是成功或失败状态
2、fulfilled:意味着操作成功完成
3、rejected:操作失败
- fulfilled 和 rejected 合在一起称为 resolved
Promise 用于表示一个异步操作的最终完成(或失败)及其结果值。语法上是一个构造函数;
1、本轮 事件循环 运行完成之前,回调函数是不会被调用的;
2、即使异步操作已经完成,之后通过then()添加的回调函数也会被调用;
3、通过多次调用then()可以添加多个回调函数,他们会按照插入顺序执行then() 函数会返回一个和原来不同的新的Promise.then方法的返回结果是Promise对象,对象状态由回调函数的执行结果来决定
4、Promise.then() 传递resolve和reject方法作为回调
5、链式调用:连续执行两个或者多个异步操作,在上一个操作执行成功之后,开始下一个操作,并带着上一波操作所返回的结果
Promise 是一种处理异步代码(而不会陷入回调地狱) 的方式
1、执行了 resolve,Promise状态就会变成 fulfilled 已完成状态
2、执行了 reject,Promise状态就会变成 rejected 被拒绝状态
3、Promise 只以第一次执行结果为准,第一次成功就 永久 为 fulfilled ,第一次失败就永远状态为 rejected
4、Promise 中有 throw 的话,就相当于执行了 reject
<script>
let p1 = new Promise((resolve, reject) => {
resolve('成功状态');
reject('失败状态');
})
console.log('#p状态#', p1);
let p2 = new Promise((resolve, reject) => {
reject('失败状态');
resolve('成功状态');
})
console.log('#p2 状态#', p2);
let p3 = new Promise((resolve, reject) => {
throw ('报错了!');
})
console.log('#p3状态', p3);
</script>
Promise状态
Promise 的初始状态为 Pending Promise 里没有执行 resolve、reject 或throw的话,这个 Promise 的状态也是 Pending,pending 状态下的 Promise 不会执行回调函数 then()
<script>
let myPromise = new Promise(() => {});
console.log("myPromise : >>", myPromise);
let myPromise1 = new Promise((resolve, reject) => {
let a = 1;
for (let index = 0; index < 5; index++) {
a++;
}
})
console.log("myPromise : >>", myPromise1);
myPromise1.then(() => {
console.log("myPromise1 已经执行了 then")
})
</script>
执行结果如下:
必须给 Promise 对象传入一个执行函数,否则会报错 在本轮 事件循环 运行完成之前,不调用回调函数。 即使异步操作已经完成 (成功或失败) ,之后通过
then() 添加的回调函数还会被调用。通过多次调用then()可以添加多个回调函数,他们会按照插入顺序执行。
<script>
let myPromise0 = new Promise();
console.log("myPromise0:>>", myPromise0);
</script>
执行结果会报错: