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.pswp.cn/news/449641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449641.shtml
英文地址,請注明出處:http://en.pswp.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…