JS中对Promise的理解与使用

本文介绍了Promise在JavaScript中的作用,它是一种处理异步操作的方法,旨在改善回调函数的写法。详细阐述了Promise的三种状态(pending、rejected、fulfilled)以及如何使用构造函数、then、catch等方法进行操作。通过示例代码展示了Promise的用法,包括处理连续多个Promise的情况。

JS中对Promise的理解与使用

1.Promise 它是什么

Promise 是一个类,可。。。

其实就是一种写异步代码的方式。。。。。。

2.Promise 干什么用

将异步代码的回调写法改为同步代码(此处只是写法改变,代码还是异步执行)

3.Promise 的三种状态

  • pending => 等待
  • rejected => 已拒绝
  • fulfilled => 已执行

3.Promise 的用法

首先,我们需要了解 Promise 都有哪些内容:构造函数、对象的实例方法、静态方法

  • 1个构造函数:new Promise
  • 3个对象的实例方法:.then 和 .catch 和 finally(不常用)
  • 4个静态方法:Promise.all、Promise.race和Promise.resolve、Promise.reject
//创建一个Promise的实例 ———— p对象
var p = new Promise();

传递一个回调函数作为 Promise 的参数,在这个回调函数里面发送异步请求。
回调函数中有两个参数:
resolve:是一个函数,执行的时候会把Promise实例的状态变为成功并且可以传递一个参数(只能传递一个)
reject:是一个函数,执行的时候会把Promise实例的状态变为失败并且可以传递一个参数(只能传递一个)

p实例对象的3个方法,then、catch、finally
then(successCallback, failedCallback) 接收两个参数,分别表示成功/失败时的回调函数。
successCallback 的参数是resolve() 传递的参数;failedCallback 的参数是reject() 传递的参数

好了,上代码,看看Promise的使用示例

var p = new Promise(function(resolve, reject) {
            QF.get("./a.php", {}, function(data) {
                if (!data.error) {
                    resolve(data);
                } else {
                    reject(data)
                }
            })
        });
        //监听成功执行的函数
        p.then(function(data) {
            console.log("chenggongcode....")         
        })
        //监听失败执行的函数
        .catch(function){
            console.log("shibaicode...")
        })

// 输出:chenggongcode....

那么如果连续多个Promise 呢?

function sendAjax1() {
            return new Promise((resolve, reject) => {
                QF.get("./a.php", {}, (data) => {
                    if (!data.error) {
                        resolve(data);
                    } else {
                        reject("第一个请求失败了");
                    }
                });
            });
        }
        function sendAjax2() {
            return new Promise((resolve, reject) => {
                QF.get("./b.php", {}, (data) => {
                    if (!data.error) {
                        resolve(data);
                    } else {
                        reject("第二个请求失败了");
                    }
                })
            });
        }

        function sendAjax3() {
            return new Promise((resolve, reject) => {
                QF.get("./c.php", {}, (data) => {
                    if (!data.error) {
                        resolve(data);
                    } else {
                        reject("第三个请求失败了");
                    }
                })
            })
        }
        console.log("第一个请求发送了")
        let p = sendAjax1();
        p.then(() => {
            console.log("第一个请求回来了")
            console.log("第二个请求发送了")
            return sendAjax2();
        })
        .then((data) => {
            console.log("第二个请求回来了")
            console.log("第三个请求发送了")
            return sendAjax3();
        })
        .then((data) => {
            console.log("第三个请求回来了")
        })
        // 统一处理前面每一个Promise实例失败的可能性 
        .catch(function (data) {
            console.log(data)
        })
        // 最后 不论成功还是失败 总会执行finally的函数
        .finally(function() {
            console.log("你好我是finally函数")
        })

php代码:

//a.php文件
<?php
    sleep(10);
    echo json_encode(array("error" => 0, "data" => "成功111111"));
?>

//b.php文件
<?php
    sleep(2);
    echo json_encode(array("error" => 1, "data" => "成功2"));
?>

look look执行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大概先到这了,日后继续完善

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值