JS每日一题: 如何理解es6中的Promise?

本文深入讲解ES6中Promise的概念,探讨其在JavaScript异步编程中的作用。Promise对象代表异步操作,具有三种状态:pending(进行中)、fulfilled(成功)和rejected(失败)。文章详细解释了Promise的基本用法,包括then、catch和finally方法,以及Promise.all的使用场景。
摘要由CSDN通过智能技术生成
20190123问:

如何理解es6中的Promise?

试题解析:考查对JS中同步异步的理解,及工作中常用的使用场景

参考回答

js是单线程的,也就是说一次只能完成一个任务,为了解决这个问题,js将任务的执行模式分为两种, 同步和异步, 在es5中我们处理异步只能通过的回调的方式进行处理,在多层异步中,回调会一层一层嵌套,也就是所谓的回调地狱,promise就是异步编程的一种解决方案

Promise

特点:

  • 对象的状态不受外界影响, promise对象代表一个异步操作,有三种状态pendding(进行中), fulfilled(成功), rejected(失败)
  • 一旦状态改变,就不会再变, 状态的改变只有两种可能, pendding => fulfilled及pendding => rejected

基本用法:

const promise = new Promise(function(resolve, reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value); // 将状态从pendding变成fulfilled
  } else {
    reject(error); // 将状态从pendding变成rejected
  }
});
复制代码

promise 生成实例后可以使用then方法接收resolved状态和rejected状态的回调函数

    promise.then( ()=> {
        console.log('resolved')
    }, () => {
        console.log('rejected')
    })
复制代码

promise原型上具有catch方法, catch方法是rejection的别名, 用于指定发生错误时的回调函数

    promise.then( ()=> {
        console.log('resolved')
    }, () => {
        console.log('rejected')
    }).catch( (err) => {
        console.log('catch')
    })
复制代码

promise原型上具有finally方法,用于不管promise对象最后的状态如何,都会执行的操作

    promise.then( ()=> {
        console.log('resolved')
    }, () => {
        console.log('rejected')
    }).finally( (err) => {
        console.log('end')
    })
复制代码
Promise.all

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例

简单使用:

const p = Promise.all([p1, p2, p3]);
复制代码

特点:

  • 参数都是promise实例,如果不是会调用promise.resolve方法将其转为promise实例
  • p的奖态由传入的promise实例的状态决定
    • promise实例状态都变成fulfilled,p状态为fulfilled
    • promise实例状态一个变成rejected,p状态为rejected
题后思考

为何实现一个promise

往期

JS每日一题: 前端的缓存有哪些?都适用什么场景?区别是什么?
JS每日一题: Call,Apply,Bind的使用与区别,如何实现一个bind?
JS每日一题: 说说你对前端模块化的理解
JS每日一题: web安全攻击手段有哪些?以及如何防范

关于JS每日一题

JS每日一题可以看成是一个语音答题社区
每天利用碎片时间采用60秒内的语音形式来完成当天的考题
群主在次日0点推送当天的参考答案

  • 注 绝不仅限于完成当天任务,更多是查漏补缺,学习群内其它同学优秀的答题思路

点击加入答题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值