系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、Promise是什么?
  • 二、如何避免回调地狱?
    • 2.1Promise基本语法
    • 2.2Promise的三种状态.
      • 2.2.1 状态运行代码示例
      • 2.2.2Promise的链式调用
    • 3.Promise的all方法使用
  • 三.总结

前言

高山仰止,景行行止。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Promise是什么?

ES6中一个非常重要和好用的特性就是Promise
Promise是异步编程的一种解决方案。
那什么时候我们会来处理异步事件呢?
一种很常见的场景应该就是网络请求了。
我们封装一个网络请求的函数,因为不能立即拿到结果,所以不能像简单的3+4=7一样将结果返回。
所以往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去。
如果只是一个简单的网络请求,那么这种方案不会给我们带来很大的麻烦。
但是,当网络请求非常复杂时,就会出现回调地狱。(多层嵌套,像深度递归)

注意!!Promise的返回值必须调用.then()才能获取[[PromiseResult]]的值

二、如何避免回调地狱?

2.1Promise基本语法

代码如下:(视频理解)

// 参数-->函数(resolve,reject)
// resolve,reject本身又是函数
// 链式编程
new Promise((resolve,reject) => {//异步操作封装于PromisesetTimeout(() => {resolve();//调用resolve,就会自动调用下面的then()函数},1000)
}).then(() => {//第一次模拟发送网络请求的代码console.log("hello world!");console.log("hello world!");console.log("hello world!");console.log("hello world!");return new Promise((resolve, reject) =>{setTimeout (() => {resolve()},1000)})
}).then( () => {//第二次模拟发送网络请求的代码console.log("hello vuejs");console.log("hello vuejs");console.log("hello vuejs");console.log("hello vuejs");return new Promise( (resolve, reject) => {setTimeout( () => {resolve()},1000)})
}).then( () => {//第三次模拟发送网络请求的代码console.log("hello python");console.log("hello python");console.log("hello python");console.log("hello python");
})

2.2Promise的三种状态.

首先,当我们开发中有异步操作时,就可以给异步操作包装一个Promise
异步操作之后会有三种状态我们一起来看一下这三种状态:
pending :等待状态,比如正在进行网络请求,或者定时器没有到时间。
fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()

2.2.1 状态运行代码示例

new Promise((resolve, reject) => {setTimeout( () => {// 成功时调用resolve -> then// 失败时调用reject -> catchreject('error message')},1000)
}).then((data) => {console.log("Hello World!");
}).catch((err) => {console.log(err);
})

2.2.2Promise的链式调用

链式一:

// 参数-->函数(resolve,reject)
// resolve,reject本身又是函数
// 链式编程
new Promise((resolve,reject) => {//异步操作封装于PromisesetTimeout(() => {resolve();//调用resolve,就会自动调用下面的then()函数},1000)
}).then(() => {//第一次模拟发送网络请求的代码console.log("hello world!");console.log("hello world!");console.log("hello world!");console.log("hello world!");return new Promise((resolve, reject) =>{setTimeout (() => {resolve()},1000)})
}).then( () => {//第二次模拟发送网络请求的代码console.log("hello vuejs");console.log("hello vuejs");console.log("hello vuejs");console.log("hello vuejs");return new Promise( (resolve, reject) => {setTimeout( () => {resolve()},1000)})
}).then( () => {//第三次模拟发送网络请求的代码console.log("hello python");console.log("hello python");console.log("hello python");console.log("hello python");
})

3.Promise的all方法使用

视频讲解传送门

下方使用ajax模拟 多请求

//参数->可迭代对象
//all会等待两个请求完毕.
Promise.all([new Promise( (resolve, reject) => {$.ajax({url: 'url1',success: function (data) {resolve(data)}})}),new Promise( (resolve, reject) => {$.ajax({url: 'url2',success: function (data) {resolve(data)}})})
]).then( results => {results[0]//返回保存的第一个请求results[1]//返回保存的第二个请求
})

注意!!Promise的返回值必须调用.then()才能获取[[PromiseResult]]的值


三.总结

对于勇士来说,贫并困窘、责难、诽谤、冷嘲热讽……,一切压迫都是前进的动力。

异步处理-Promise解决回调地狱相关推荐

  1. promise解决回调地狱(callback hell)

    promise解决回调地狱(callback hell) 具体参考 阮一峰,ES6标准入门 在我们需要对一个异步操作进行频繁的调用的时候,且要保证一步操作的顺序,可能会出现 回调地狱(callback ...

  2. Promise的基础使用与生成器配合Promise解决回调地狱

    经过几天对Promise的了解,希望可以帮助到大家. 什么是回调地狱         说起回调地狱 首先想到的是异步 在js中我们经常会大量使用异步回调,常用的ajxa请求 来看下面这段代码: fun ...

  3. Promise(解决回调地狱)

    Promise() 对象: 存在三种状态: //进行时 pending// 成功 resolve//失败 reject 执行语句: let promise= new Promise((resolve, ...

  4. promise解决回调地狱的问题

    什么是回调地狱 怎么解决回调地狱的问题 要了解什么是回调地狱,首先要了解 什么是同步,什么是异步函数 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数要做的事情全部做完之 ...

  5. Promise解决回调地狱

    一.Promise是什么 Promise 其实是异步编程的一种解决方案.简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,可以从 ...

  6. Promise解决回调地狱写法

    这里可以使用Promise来解决回调地狱的问题! 那么我们这里有一个需求,就是我们需要读取三个 .txt 文件,需要第一个文件读取完成后才能读取第二个文件以此类推. 那么这里来一个Promise的错误 ...

  7. node js Bluebird 简单介绍 promise 解决回调地狱

    Promise是异步代码实现控制流的一种方式.这一方式可以让你的代码干净.可读并且健壮. 异步回调如下: fs.readFile('directory/file-to-read', function( ...

  8. 使用promise解决回调地狱_「每日一题」Promise 是什么?

    window.Promise 已经是 JS 的一个内置对象了. 1. Promise 有规格文档吗? 2. 你一般如何使用 Promise. ----------- 目前的 Promise 都遵循 P ...

  9. 异步API中promise解决回调地狱问题和异步函数async终极解决方案

  10. 使用promise解决回调地狱_使用Promise 解决回调地狱

    const fs = require('fs') function getFileByPath(fpath) { return new Promise(function (resolve, rejec ...

最新文章

  1. html创建等边三角形,CSS3 等边三角形组成星形图案
  2. spring中事务的设计和实现
  3. Jsch ssh登陆
  4. 啊哈java_1.桶排序——啊哈算法java实现
  5. linux下node-webkit安装vlc插件
  6. JAVA数组、算法、递归
  7. 学习笔记之——YEDDA
  8. GPU硬件加速的原理
  9. Python 之 处理 Excel 数据(3) —— 统计数据
  10. webstorm 2018 激活破解方法大全
  11. 合泰单片机市场占有率_科创板亏损第一股年亏26亿背后:核心技术依赖母公司与台积电相差3代...
  12. mysql2008jar包下载_sqljdbc.jar2008
  13. 频传上市,奈雪的茶优势与隐忧并存
  14. mysql 回滚删除操作_Mysql如何快速回滚被删除的数据
  15. 数据结构实验整理(一)
  16. 原生m1/m2 Sketch v90 for Mac最新中文版Sketch已更新,已解决闪退打不开问题
  17. vscode 调整行间距
  18. Node.js使用jsrsasign实现SHA256withRSA加密算法
  19. 教python的app_Python教学
  20. 【NLP相关】NLP领域经典论文汇总(附代码实现)

热门文章

  1. Ubuntu系统安装及su安装
  2. u盘第一扇区 分区表_硬盘主引导扇区、分区表和分区引导扇区(MBR、DPT、DBR、BPB)详解...
  3. 【Leetcode刷题】:Python:347. 前 K 个高频元素
  4. APISpace 行驶证OCR API
  5. Java 进口管制限制解除
  6. matlab串联矩阵如何表示,MATLAB串联矩阵
  7. MediaSession原理以及使用
  8. 论文写作课程收获总结
  9. 关于Chrome的谷歌翻译和IDEA中的Translation翻译插件无法使用的解决方法
  10. 数据+人工智能+模型——北京市新一代交通仿真模型框架