解决回调地狱(一): Promise

162 阅读4分钟
原文链接: www.jianshu.com
登录 注册写文章 首页下载APP

解决回调地狱(一): Promise

Homary 关注赞赏支持

解决回调地狱(一): Promise

0.603 字数 838阅读 8334

前言: Promise是异步编程的一种解决方案, 比传统的解决方案--回调函数和事件更加强大.由社区最早提出和实现,ES6将其写进了语言标准,统一了用法,原生提供了Promise对象. 没有Promise之前,解决异步都是依赖回调,但执行多个具备前后顺序的异步操作时代码就会非常乱并且出现问题难调试.

image.png

这只是简单的数据库查询操作,当操作多时就会回调中嵌着回调,所谓的回调地狱. 使用Promise呢?

image.png

横向写代码变成了纵向,更加的直观,使用then进行下一步,代码清晰.

说一下Promise的基本用法, Promise有三种状态. 可以看下面的图片

image.png

Promise一旦新建就立刻执行, 此时的状态是Pending(进行中),它接受两个参数分别是resolve和reject.它们是两个函数.
resolve函数的作用是将Promise对象的状态从'未完成'变为'成功'(由Pending变为Resolved), 在异步操作成功时,将操作结果作为参数传递出去;
reject函数的作用是将Promise对象的状态从'未完成'变为失败(由Pending变为Rejected),在异步操作失败时调用,并将异步操作的错误作为参数传递出去.

Promise的用法 1.生成Promise实例

  1. 执行一系列同步操作
    3.使用resolve函数将异步操作的结果传递出去, reject函数传递异步操作的错误
    4.用then方法分别指定Resolve状态和Reject状态的函数,then方法返回一个新的Promise实例,因此可以采用链式写法
image.png

catch函数: 用于指定发生错误时的回调函数, 可以看成是 .then( null, reject() );当执行多个then操作时,建议用catch进行错误处理, 不用每个then函数都写一个reject的回调函数

image.png

catch回捕捉到前面执行时发生的错误.

Promise.all( 传入一个数组,每一项分别是一个Promise实例 ), 当数据里的Promise状态都变为resolve时, Promise.all状态才变为resolve 只要有一个Promise的状态变为reject, Promise.all就变为reject; 可以将数组里的Promise看成是 "与" 关系

Promise.race( 传入一个数组,每一项分别是Promise实例 ), 与Promise.all相反, race可以看到 是 "或" 关系, 只要有一个Promise状态变为resolve, Promise.all 就变为resolve

Promise.resolve(): 将现有对象转为Promise对象 (1) 参数是一个Promise实例的话,不做任何变动,返回原对象

(2) 参数是一个具有then方法的对象

image.png

Promise.resolve方法会将这个对象转为Promise对象, 然后立即执行该对象的then方法

(3) 参数不具有then方法, 或者根本不是对象. Promise.resolve方法返回一个新的Promise对象, 状态为Resolve

image.png

(4) 不带任何任何参数 Promise.resolve方法直接返回一个Resolve状态的Promise对象

Promise.reject(): 返回一个新的Promise实例,该实例状态为reject; 参数用法与Promise.resolve()方法完全一致

注意
Promise.resolve(返回的数据将成为下一个then函数中的参数)


Promise.resolve()
.then(function(){
//异步函数
}).then(function(){
//异步函数
})


5人点赞 Javascript   Homary 拥有6钻 (约0.67元) 关注 "小礼物走一走,来简书关注我"   共1人赞赏 赞赏 广告

推荐阅读更多精彩内容

  • Promise 对象 Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函... neromous
  • Promise 对象 目录:Promise 的含义基本用法Promise.prototype.then()Promise.prototy... BluesCurry
  • 13、Promise 对象 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区... 夜幕小草
  • ES6之Promise深入学习笔记 Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr... 雨飞飞雨
  • 晨读感悟:不拖延的秘诀 拖延症总是让人很烦恼。今天晨读材料中的边际点效应给了我灵感,我想分享一下我自己治疗拖延的好方法。 001 每天早上... 桃一
广告 Homary关注 拥有6钻 (约0.67元) 封装openlayer,简易开发地图 阅读 163 Vue中使用highlight.js格式化高亮代码 阅读 746

精彩继续

“七料影帝”张家辉:像我这种男人,也只有她配得上? 阅读 15024 看完这六张照片,什么事都想开了!值得所有人看看 阅读 4000 广告 评论0 赞5 5赞6赞 1 赞赏