ES6中的Promise

本文详细介绍了ES6中的Promise,解决回调地狱的问题。Promise有三种状态:pending、fulfilled和rejected,状态一旦改变不可逆。用法包括then()、catch()、Promise.all()和Promise.race()等,强调了错误处理和状态传递的重要性。同时,文中提到了Promise.resolve()和Promise.reject()的使用场景和规则。
摘要由CSDN通过智能技术生成

title: ES6中的Promise

一. 提要

为解决传统异步所造成的回调地狱,社区提出了Promise方案并最终将其写入了语言标准。其用法如其名——承诺:即非立即兑现,通过then方法调用其状态,通过catch捕获错误。

二. 状态

  • Pending:进行中
  • Fulfilled:已成功
  • Rejected:已失败

Promise的另一个特性是无法改变。正如其英文寓意一样,一旦状态改变就无法继续更改。故我们将FulfilledRejected统一称为Resolved(已定型)

三. 缺点

当然Promise也有一些缺点:

  • 一旦创建立即执行,无法中途取消。
  • 若不设置回调函数则其内部错误不会抛向外部
  • Pending状态时无法知道目前进展到哪一阶段(开始或即将完成)

四. 用法

var p = new Promise((resolve, reject)=>{
   
	console.log('Create a Promise')
    resolve('success')
})
console.log('After new Promise')
p.then(val=>{
   
    console.log(val)
})

// Create a Promise
// success
// After new Promise
// Promise {<resolved>: undefined}

如图,我们创建promise时其会立即执行,一旦状态发生改变那么立即调用then方法中的函数。

没看出来?咱们加个定时器试试

function timeout(ms){
   
    return new Promise((resolve, reject)=>{
   
        console.log('Running Immediately')
        setTimeout(resolve, ms, 'done')
    })
}
timeout(100).then(val=>{
   
	console.log(val)
},err=>{
   
    console.log(err)
})
// Running Immediately
// Promise {<pending>}
// done

看到了吧,只要状态一旦改变那么会立即执行then方法。我们平日所写的ajax函数从此也再不需要进行嵌套回调了

var getJSON = (url)=>{
   
    var promise = new Promise((resolve, reject)=>{
   
        var client = new XMLHttpRequest
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值