promise之我见

在我们平时的方法中有很多方法是promise封装的,

有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点

 

(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。

 

 上边这句话摘自阮一峰老师的博客    但是讲是讲出来了,总感觉有些朦胧,深挖一下,上图看看这个promise里边到底都有什么

 

 

需要注意的是Promise 的首字母要大写 因为是构造函数 不然会报错 ,之前犯过这样的错误,找了好久,提醒一下

 

 

 

 promise的三种状态

 

 PromiseValue 用法

 

 

上边说了catch和then,一个接收成功一个接收失败,promise里边还有一个finally方法,他是不管成功还是失败只要promise执行完毕这个函数都会被执行

 

 

 

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。

Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected

只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。

如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

 

那么讲了这么一大堆  这个promise他到底有什么用处呢,就是为了解决回调地狱,之前在网上看到过这么一个图片

 

这代码看起来是不是很酸爽,回调一层套一层,多了的话感觉就是一个大型的冲击波,冲击着js开发者的心灵

 

举个例子

 

 

but到这里貌似和回调没有什么毛区别  ,他的优势体现在哪里,so 看图

 

 

打印了一下then方法   发现里边还是一个promise,所以说return的结果可以继续被.then,且结果可以继续被调用

如果用回调的话就会造成回调地狱现象

promise的话大大的降低了维护成本和让代码看起来更优雅

 

promise除了原型链上的方法之外还有一些他本身的方法,如下图

 

 

promise.all()

这个方法允许传入一个数组 他会执行里边所有的promise实例  如果传入的不是promise也会被转换成promise

并且只有在传入的所有的参数都返回resovled的时候all()方法才会是resolve,其中有一个参数是rejected的话

all()方法状态就是变成rejected

 

promise.race()

这个方法相对于上边的all()而言,它更像是比赛跑,他会返回第一个执行完毕的promise实例的状态

 

promise.resolve()

这个方法会把一个对象创建成一个promise对象并return出resolve状态出来

如果传进去的是一个promise对象的话  那么就会被直接return出来并执行resolve

 

 

promise.reject()

同理

该方法也会返回一个新的 Promise 实例,该实例的状态为rejected并执行reject

 

 

如有不足之处请大家批评指正

 

转载于:https://www.cnblogs.com/netUserAdd/p/10449873.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020-11-26

import datetime last[date] last[date].apply(lambda x:datetime.datetime.strptime(str(x),%Y%m%d).strftime(%Y/%m/%d)) cu.rename(columns{"Unnamed: 0":"date"},inplaceTrue) traindatapd.DataFrame(traindata,dtypenp.float) list 转化Data Frame …

CPP虚析构函数

#include<iostream> using namespace std;class base {public:base(){};virtual ~base(){}; };// 在类声明中声明纯虚析构函数 //base::~base() {}class father: public base {public:~father(){cout << "father" << endl;} };int main() {base* a…

学习过程中的一些想法

2019.01.18 问题描述&#xff1a;在学习响应式布局视频教程的时候&#xff0c;遇到了一些不是特别明白的知识点&#xff0c;比如&#xff1a;媒体查询、视口&#xff0c;视频中会讲解使用的那一部分东西&#xff0c;不太影响我继续看视频&#xff08;能大概理解&#xff09;&am…

idea 新建springboot 的 web 项目

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 IDAE中新建web项目见&#xff1a;IntelliJ IDEA中新建JAVA WEB项目、maven项目 默认已有一个 maven 的 web 项目&#xff1a;gentle --…

PHP工程师需要掌握的知识(转载)

掌握PHP基础、文件操作、面向对象编程、CURL扩展。掌握Linux环境下面LAMP环境搭建、LNMP环境搭建。了解基本的HTTP协议和计算机网络知识。熟悉常用的算法与数据结构知识&#xff0c;队列、栈、队、图、树、排序算法等。熟悉前端HTML、CSS、jQuery、BootStarp等知识。熟悉常用的…

读码,解码,转换

import chardet f open(ff2.csv,rb) data f.read() chardet.detect(data){encoding: GB2312, confidence: 0.99, language: Chinese}

从全栈式解决方案到情感化,揭秘问众智能切入车载语音市场的最佳姿势...

*问众智能CEO张亚 如果说语音交互是车载场景的最佳方式&#xff0c;未来谁掌握车内语音交互“话语权”&#xff0c;谁就将主宰车辆智能网联的新时代。 经过多年的渐进式发展&#xff0c;语音交互的价值正逐步走出单纯“控制方式”的狭隘理解&#xff0c;向业内人眼中的“智能…

浮想——我和CSDN走过了3个时代(长文,无耐心读完者勿入)

上周末公司年会&#xff0c;董事长蒋涛同学分享了他13年的创业经历。 算起来&#xff0c;这已经是我第1、2、3、4、5、6、7年参加CSDN的年会了。场面上&#xff0c;这也是最大的一次&#xff0c;也是蒋涛同学讲话时间最长的一次。下午时光&#xff0c;宝贝正在我怀里沉沉的睡着…

CentOS7的yum安装mysql

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、mariadb 查看CentOS7中是否已经安装了mariadb数据库,若安装了mariadb数据库&#xff0c;先卸载mariadb数据再安装MySQL。若没有安装m…

3530: [Sdoi2014]数数

3530: [Sdoi2014]数数 链接 分析&#xff1a; 对给定的串建立AC自动机&#xff0c;然后数位dp。数位dp的过程中&#xff0c;记录当前在AC自动机的哪个点上&#xff0c;保证不能走到出现了给定串的点。 代码&#xff1a; #include<cstdio> #include<algorithm> #inc…

阿里云日志添加要查询字段

第一步&#xff1a;在API基控制器&#xff08;base文件下&#xff09;下面 $arr 就是我要接受的所有参数值&#xff0c;而 msg_id就是我以后要在阿里云日志中查询的字段&#xff0c;以此字段统计某些数据 $arr 是前台API接口传过来的数据 &#xff0c;这里我需要使用 $arr[id] …

总理整节从事量化交易员所做工作与代码

数据获取&#xff08;期权数据&#xff09; 本人从事领域为量化期权领域&#xff08;皇冠上的明珠&#xff0c;真好听&#xff0c;可是做起来&#xff0c;难度真是&#xff08;滴-------------&#xff09;&#xff09;。从最开始的手动从三大所复制粘贴期权数据&#xff0c;到…

Docker 上安装、启动 MySQL (图解)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在docker仓库中搜索mysql的镜像&#xff1a; docker search mysql 下载镜像&#xff1a; docker pull mysql 2. 查看本地镜…

关于 std::set/std::map 的几个为什么

2013-01-20 std::set/std::map &#xff08;以下用 std::map 代表&#xff09; 是常用的关联式容器&#xff0c;也是 ADT&#xff08;抽象数据类型&#xff09;。也就是说&#xff0c;其接口&#xff08;不是 OO 意义下的 interface&#xff09;不仅规定了操作的功能&#xff…

HDU 3572 Task Schedule

传送门 作业调度&#xff0c;这道题还真没想到能用网络流。。。。乍一看跟背包问题差不多。 有N个作业&#xff0c;M个机器&#xff0c;每个作业给你一个耗费时间&#xff08;时间段&#xff09;以及最早开始时间和最晚完成时间&#xff08;这两个是时间点&#xff09;&#xf…

MariaDB安装1,2

2019独角兽企业重金招聘Python工程师标准>>> 4.22 MariaDB安装 MariaDB是MySQL的一个分支。MySQL——>sun——>Oracle&#xff0c;维基百科&#xff1a;https://en.wikipedia.org/wiki/MariaDB 官网&#xff1a;https://mariadb.org MariaDB 10.3.11Linux64位…

CentOS 7 上 Docker 安装

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Docker支持以下的CentOS版本&#xff1a; CentOS 7 (64-bit)CentOS 6.5 (64-bit) 或更高的版本前提条件 目前&#xff0c;CentOS 仅发…

python画图(散点图,折线图)

判断小数点几位 先将浮点数转化为字符串&#xff0c;然后截取小数点右边的字符&#xff0c;在使用len函数。 x3.25 len(str(x).split(".")[1]) 绘制散点图 #需导入要用到的库文件 import numpy as np # 数组相关的库 import matplotlib.pyplot as plt # 绘图库 N …

pyqt 不规则形状窗口显示

#codingutf-8 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPixmap, QPainter, QBitmap, QCursor import PyQt5.QtCore as QtCoreclass PixWindow(QWidget): # 不规则窗体def __init__(self):super()…

【英语-刘晓艳-词汇】词汇06

【第一部分&#xff1a;回顾前 5 节单词】 【第二部分&#xff1a;新单词】 A. vivid 补充&#xff1a;viv 生存 revive     survive &#xff08;sur surface&#xff0c;surpass &#xff09; B. bright 20. When I read the newspaper, I always read the ___ first. A…