Promise的一些理解

本文深入探讨了Promise机制在异步计算中的应用,详细解释了resolve、reject如何改变Promise状态,以及如何通过then和catch处理异步操作的成功与失败。同时,文章还提供了实际代码示例,帮助读者更好地理解和掌握Promise的使用。

Promise理解

纯粹为个人理解,有误请指正

什么是异步

查询数据从数据库,PHP第一个任务查询数据,后面有了新任务,那么后面任务会被挂起排队,而nodeJS是第一个任务挂起交给数据库去跑,然后去接待第二个任务交给对应的系统组件去处理挂起,接着去接待第三个任务···

示例:

 new Promise((res, rej) => {
            setTimeout(() => {
                res('1')
            }, 2000);
        }).then(val => {
            console.log(val);
        }).catch(err => {
            console.log(err);
        })
        console.log('2');
        //输出:
        //2
        //1
promise是什么?
  1. 主要用于异步计算
  2. 作为一个对象,可以保存状态
new Promise(
  function (resolve, reject) {
    // 一段耗时的异步操作
    resolve('成功') // 数据处理完成
    // reject('失败') // 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)
resolve、reject的作用

主要用于改变promise的状态,通过分支,运行到哪个改变成对应的状态

  • resolve作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 fulfilled),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。
  • reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
promise的状态——不可逆
  1. pending [待定]初始状态
  2. fulfilled [实现]操作成功
  3. rejected [被否决]操作失败

一旦状态发生改变,就会触发then()里面的响应函数处理后续步骤。

错误捕捉:

方式一:

示例代码:

new Promise((res, rej) => {
            setTimeout(() => {
                res('正确')
            }, 2000);
            rej('错误')
        }).then(val => {
            console.log(val);
        }, err => {
            console.log(err);
        })

方式二:

示例代码:

 new Promise((res, rej) => {
            setTimeout(() => {
                res('正确')
            }, 2000);
            rej('错误')
        }).then(val => {
            console.log(val);
        }).catch(err => {
            console.log(err);
        })

promise进入rejected状态,会直接进入catch()

用法:
  • 常见用法:

    异步操作和定时器放在一起,,如果定时器先触发,就认为超时,告知用户;
    例如我们要从远程的服务家在资源如果5000ms还没有加载过来我们就告知用户加载失败

  • 现实中常用:

    回调包装成Promise,他有两个显而易见的好处:
    1、可读性好
    2、返回 的结果可以加入任何Promise队列

参考:https://www.jianshu.com/p/1b63a13c2701

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值