本文是我在进阶路上学到的知识点,因为我们在学习路上或多或少都使用了解过Promise,但并不能了解它的实现原理,所以我将与大家一起分享,我们开始吧
Promise是ES6中的规范,它被用于解决js中异步编程,避免了使用多重回调函数,产生回调地狱的问题,对于回调地狱我们知道它就行,因为现在我们有Promise。
首先来看不使用Promise的异步例子:延时的给用户返回信息
<script type="text/javascript">
const time = 2000; //延时时间
document.getElementById('btn').addEventListener("click", () => {
setTimeout(() => {
alert(`You Click me ${time / 1000} minutes ago`);
}, time)
})
</script>
很简单的例子,会在延时time之后输出,我们可以用Promise来实现它:
const time = 2000; //延时时间
document.getElementById('btn').addEventListener("click", () => {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
if (time <= 2000) {
resolve();
} else {
reject();
}
}, time)
});
promise.then(() => {
alert(`You Click me ${time / 1000} minutes ago!`);
}, () => {
alert("Message transport overtime!");
})
})
这就是我们常用的Promise情况,在Promise中传入一个函数,参数中有resolve和reject(名字任意),成功调resolve函数,失败调reject函数。
细说Promise的各个特点(这有助于我们实现Promise):
1.链式调用,一个Promise可以调用多次then方法,因为then方法会返回一个新的Promise函数。
2.当调用了一次resolve或者reject后,对应的所有成功或者失败回调都会被调用
- Promise的原型上有一个promisestate和promiseresult,这个state就是promise的status状态。未执行回调前状态为pending,成功回调后状态为fulfilled/resolved,失败回调后为reject。而promiseresult为成功或者失败返回的值。成功称为value,失败称为reason。