一篇文章掌握Promise的使用

106 阅读1分钟

本文是我在进阶路上学到的知识点,因为我们在学习路上或多或少都使用了解过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函数。

image.png

2.当调用了一次resolve或者reject后,对应的所有成功或者失败回调都会被调用

image.png

  1. Promise的原型上有一个promisestate和promiseresult,这个state就是promise的status状态。未执行回调前状态为pending,成功回调后状态为fulfilled/resolved,失败回调后为reject。而promiseresult为成功或者失败返回的值。成功称为value,失败称为reason。