简单了解promise
promise是什么:
JavaScript中存在很多异步操作, Promise将异步操作队列化,按照期望的顺序执行,返回 符合预期的结果。可以通过链式调用多个 Promise达到我们的目的。 Promise 在各种开源库中已经实现,现在标准化后被浏览器默认支持。 Promise 是一个拥有then方法的对象或函数
为什么会有promise?
为了避免界面冻结(任务) 异步回调的问题: 之前处理异步是通过纯粹的回调函数的形式进行处理 很容易进入到回调地狱中,剥夺了函数return的能力 问题可以解决,但是难以读懂,维护困难 稍有不慎就会踏入回调地狱 - 嵌套层次深,不好维护
promise的优点 并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据 代码风格,容易理解,便于维护 多个异步等待合并便于解决 简化编程,让代码逻辑更加清晰。
Promise 可以理解为承诺,就像我们去KFC 点餐服务员给我们取餐票,这就是承诺。如果 餐做好了叫我们这就是成功,如果没有办法给 我们做出食物这就是拒绝。
基础知识点补充:
promise有三个状态:
1、pending[待定]初始状态
2、fulfilled[实现]操作成功
3、rejected[被否决]操作失败
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;一个Promise 只能成功或失败一次,状态无法改变且产生后不可逆. (成功和失败同时存在时谁在前谁产生作用)
总结: promise状态是单向的,不可逆的,不可撤销的
resolve作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved) 在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected, 在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
基本语法
(1) Promise.then的基本语法:
一个 promise 必须有一个then方法用于处理状态改变 后面的then就是对前面返回的Promise的处理
(2)Promise 单一状态与状态中转
(3) Promise的多种错误检测与catch的使用
(4) Promise.resolve
Promise.reject
Promise. all
Promise. allSettled
Promise的语法糖
简单了解promise的更多相关文章
- 一个简单的Promise 实现
用了这么长时间的promise,也看了很多关于promise 的文章博客,对promise 算是些了解.但是要更深的理解promise,最好的办法还是自己实现一个. 我大概清楚promise 是对异步 ...
- 实现简单的promise
只考虑成功时的调用,方便理解一下promise的原理promise的例子: 1. 接下来一步步实现一个简单的promise step1:promise 接受一个函数作为构造函数的参数,是立即执行的,并 ...
- 如何用原生JS实现一个简单的promise
我又又又回来了,最近真是累的跟狗一样,急需一个大保健回复一下子精力 我现在是一边喝着红牛一边写着博客,好了好了,不扯了,回归整体好吧 先简单来说一下啥是promise吧 它是什么?Promise是一个 ...
- 简单版 Promise/A+,通过官方872个测试用例
promise 标准 在实现 Promise 之前要清楚的是 JavaScript 中的 Promise 遵循了 Promises/A+ 规范,所以我们在编写 Promise 时也应当遵循这个规范,建 ...
- 聊一聊看似简单的Promise.prototype.then()方法
Promise.prototype.then() Proise实例的then方法是定义在原型对象Promise.prototype上的,它的作用是为Promise实例添加状态改变时的回调函数. 该方法 ...
- 简单模拟 Promise
class promise { constructor(fn) { this.data = null; this.err = null; this.isPromise = false; this.er ...
- [手写系列] 带你实现一个简单的Promise
简介 学习之前 需要先对Promise有个基本了解哦,这里都默认大家都是比较熟悉Promise的 本次将带小伙伴们实现Promise的基本功能 Promise的基本骨架 Promise的then Pr ...
- 简单的 Promise 实现
参考 http://www.tuicool.com/articles/RzQRV3 var PENDING = undefined, FULLFILLED = 1, REJECTED = 2; var ...
- 简单的 Promise 实现 一
const Promise = function(fn){ let state = { pending: "pending", fulfilled: "fulfilled ...
- 手写简单的promise
function Promise(fn) { var that = this; this.status = "pedding"; this.value = undefined; / ...
随机推荐
- python自动化模块及运维工具
1. psutil 可以获取系统运行的进程和系统利用率(CPU 内存-)信息 import psutil 2. IPy 是python 第三方处理IP地址模块 from IPy import IP 3 ...
- UI动画练习 - CABasicAnimation:视图绕X/Y轴旋转(3D效果)
视图 3D 旋转 1 - 代码示例:以绕 X 轴旋转为例 1 #import "ViewController.h" 2 @interface ViewController () 3 ...
- java okio 找不到的问题
问题描述: okio 找不到的问题 解决办法: 下载 jar_files.zip 在idea-File-Project Structure- Project Settings - Libraries ...
- 3阶(次)贝塞尔曲线的JavaScript(JS)实现
php中文网数学符号的显示太差了,推荐看这里 贝塞尔曲线简介:贝塞尔曲线,是贝塞尔老爷子在使用电子计算机设计汽车零件的时候 进行曲面设计而采用的一种参数化的样条曲线. 一般参数方程: B(t) = \ ...
- android studio 导出 release aar
- dockerfile实践学习
一.dockerfile简介 镜像是分层存储的,每一层在前一层的基础上进行修改. 容器也是分层存储,已经向为基础层,在其他基础上加一层作为容器运行的存储层. 创建镜像的另种两种方法 手动修改容器内容, ...
- idea因时区连不上msyql8问题
转载自https://www.cnblogs.com/lakei/p/11303174.html Connection to api@localhost failed. [08001] Could n ...
- 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.
完成warning和报错信息如下. 通过报错信息提示,锁定cwebp-bin,在waring中发现有提示说要更新至7或更高版本. 解决方案:在package.json中,将cwebp-bin设置版本为 ...
- 域名证书https配置问题
目前默认通配证书只适配2级通配.例如配置2级域名的通配证书 https://a.baidu.com.如果想配置三级域名的https 需购买3级通配证书.这样才可以配置三级域名. https://a.b ...
- Word08 创新产品展示说明会邀请函office真题
1.课程的讲解之前,先来对题目进行分析,首先需要在考生文件夹下,将Wrod素材.docx文件另存为Word.docx,后续操作均基于此文件,否则不得分. 2.这一步非常的简单,打开下载素材文件,在[文 ...