Promise
promise 可解决的问题:
- 可以支持多个并发的请求,获取并发请求返回的数据
- 解决回调地狱的问题
- 真正用同步代码写异步操作的是 async await
Promise两个特点:
- 对象的状态不受外界影响
- 一旦状态改变,就不会再变,任何时候都可以得到这个结果
Promise三种状态:
- Pending(进行中)
- Resolved(已完成,又称 Fulfilled)
- Rejected(已失败)
Promise有两个参数,第一个是成功resolve的调用的方法,第二个是失败reject调用的方法
new Promise((resolve, reject) => {
if (Math.random() * 100 < = 90) {
resolve('Hello, Promises!');//成功
}
reject(new Error('error'));//失败
});
resolve
和 reject
本身也是函数,它们用于将返回值返回给 promise 对象,当成功时使用 resolve
函数将值返回,当失败或遇到错误时使用reject
函数中传递错误对象告知 promise 对象
Promise的then 方法:
then 方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。Promise 的优势就在于这个链式调用。我们可以在 then 方法中继续写 Promise 对象并返回,然后继续调用 then 来进行回调操作。
const delay = (ms) => new Promise(
(resolve) => setTimeout(resolve, ms)
);
delay(2000).then(() => {
console.log('Resolved after 2 seconds')
return delay(1500);
}).then(() => {
console.log('Resolved after 1.5 seconds');
return delay(3000);
}).then(() => {
console.log('Resolved after 3 seconds');
throw new Error();
}).catch(() => {
console.log('Caught an error.');
}).then(() => {
console.log('Done.');
});
by FYM