promise并發

一、Pomise.all的使用

Promise.all可以將多個Promise實例包裝成一個新的Promise實例。同時,成功和失敗的返回值是不同的,成功的時候返回的是一個結果數組,而失敗的時候則返回最先被reject失敗狀態的值。

let p1 = new Promise((resolve, reject) => {resolve('成功了')
})let p2 = new Promise((resolve, reject) => {resolve('success')
})let p3 = Promse.reject('失敗了')Promise.all([p1, p2]).then((result) => {console.log(result)               //['成功了', 'success']
}).catch((error) => {console.log(error)
})Promise.all([p1,p3,p2]).then((result) => {console.log(result)
}).catch((error) => {console.log(error)      // 失敗了,打出 '失敗了'
})

Promse.all在處理多個異步處理時非常有用,比如說一個頁面上需要等兩個或多個ajax的數據回來以后才正常顯示

let wake = (time) => {return new Promise((resolve, reject) => {setTimeout(() => {resolve(`${time / 1000}秒后醒來`)}, time)})
}let p1 = wake(3000)
let p2 = wake(2000)Promise.all([p1, p2]).then((result) => {console.log(result)       // [ '3秒后醒來', '2秒后醒來' ]
}).catch((error) => {console.log(error)
})

當并發請求中有錯誤返回時,整個請求就返回error信息?

let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('success')},500)
})let p2 = new Promise((resolve, reject) => {setTimeout(() => {reject('failed')}, 10000)
})
Promise.all([p1, p2]).then((result) => {console.log(result)
}).catch((error)=>{console.log(error)  // failed
})

需要特別注意的是,Promise.all獲得的成功結果的數組里面的數據順序和Promise.all接收到的數組順序是一致的,即p1的結果在前,即便p1的結果獲取的比p2要晚。這帶來了一個絕大的好處:在前端開發請求數據的過程中,偶爾會遇到發送多個請求并根據請求順序獲取和使用數據的場景,使用Promise.all毫無疑問可以解決這個問題。

二、Promise.race的使用

顧名思義,Promse.race就是賽跑的意思,意思就是說,Promise.race([p1, p2, p3])里面哪個結果獲得的快,就返回那個結果,不管結果本身是成功狀態還是失敗狀態。

let p1 = new Promise((resolve, reject) => {setTimeout(() => {resolve('success')},1000)
})let p2 = new Promise((resolve, reject) => {setTimeout(() => {reject('failed')}, 500)
})Promise.race([p1, p2]).then((result) => {console.log(result)
}).catch((error) => {console.log(error)  // 打開的是 'failed'
})

原理是挺簡單的,但是在實際運用中,比如一個場景:直播路線,給用戶發最快的那個路線。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247276.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機視覺方面的三大國際會議是ICCV, CVPR和ECCV

ICCV的全稱是International Comference on Computer Vision,正如很多和他一樣的名字的會議一行,這樣最樸實的名字的會議,通常也是這方面最nb的會議。ICCV兩年一次,與ECCV正好錯開,是公認的三個會議中級別最高的。它的舉…

Scanner類+Random

引用數據類型的使用 數據類型 變量名 new 數據類型(); 變量名.方法名(); import java.util.Scanner; publicclass ScannerDemo01 { publicstaticvoid main(String[] args) { //創建Scanner引用類型的變量 Scanner sc new Scanner(System.in); //獲取數字 System.out.print…

手寫vue2的Lazyload

調用方式,express寫個后臺服務調圖片,具體使用不貼了 import VueLazyload from "./modules/vue-lazyload";Vue.use(VueLazyload,{loading: http://localhost:3000/images/loading.gif,error: http://localhost:3000/images/error.jpg,preload…

nature,science上關于計算機視覺的一些原創文獻

真正原始創新是怎么樣的?希望這些列表對做視覺研究的朋友有些啟發,希望大家能幫我補充一些,謝謝。轉載請注明http://hi.baidu.com/daren007或者http://www.sciencenet.cn/blog/王中任.htm。1、D. Marr; T. Poggio.Cooperative Computation of…

webpack入門進階調優第一章

1.1何為Webpack webpack是開源的JS模塊打包工具 核心功能是解決模塊之間的依賴,吧哥哥模塊按照特定的規則和順序組織在一起,最終合并為一個JS文件。這個過程叫模塊打包 1.2為何需要Webpack 1.2.1何為模塊 在設計程序結構時,更好的組織方…

python類的空間問題及類之間的關系

類的空間問題及類之間的關系 類的空間問題 1.何處可以添加對象屬性 class A:def __init__(self,name):self.name namedef func(self,sex):self.sex sexobj A("alex") obj.age 18 # 通過__init__方法添加 print(obj.__dict__) obj1 A("wusir") obj.fun…

計算機視覺應關注的資源

來自美國帝騰大學的鏈接。 Camera Calibration Links to toolboxes (mostly MATLAB) for camera calibration. Paul Debevec. Modeling and Rendering Architecture from Photographs. Marc Pollefeys, Tutorial on 3D Modeling from Images,, ECCV 2000, Available here: not…

Angular 內容投影 II

內容投影是一種模式,你可以在其中插入或投影要在另一個組件中使用的內容。 簡單來說,angular的內容投影就相當于vue的內容插槽slot。所有一下就能懂了。 1、單插槽內容投影 單插槽內容投影是指創建一個組件,你可以在其中投影一個組件。如果只有一個ng-content,不需要sel…

麻省理工學生發明 震驚世界

核心提示:在普拉納夫看來,數字信息以像素的形式被限制在顯示屏幕之中。他發明的"第六感裝置"震驚全場,讓世界為之驚嘆。 MIT(麻省理工)印度裔學生Prarnav Mistry的天才發明:“第六感裝置” 視頻地址:http://v.youku.com…

Selenium常用API的使用java語言之13-多表單切換

在 Web 應用中經常會遇到 frame/iframe 表單嵌套頁面的應用, WebDriver 只能在一個頁面上對元素識別與 定位, 對于 frame/iframe 表單內嵌頁面上的元素無法直接定位。 這時就需要通過 switchTo().frame()方法將當前定 位的主體切換為 frame/iframe 表單的…

yarn下載依賴慢的解決方法

首先設置npm或者yarn鏡像為淘寶鏡像 詳情: 淘寶 NPM 鏡像 npm config set registry https://registry.npm.taobao.org OR yarn config set registry https://registry.npm.taobao.org 在項目的根目錄添加.npmrc 或者 .yarnrc 把鏡像源設置淘寶鏡像,nod…

立身成敗 在于所染

唐朝有一位正直的丞相很受唐太宗的賞識,他叫魏征。他說過一句話:“立身成本在于所染”。這句話的意思就是說,一個人一生成敗的關鍵在于交友。 孔子曰:“與善人居,如入芝蘭之室,久而不聞其香,即與…

Java生鮮電商平臺-優惠券系統的架構設計與源碼解析

Java生鮮電商平臺-優惠券系統的架構設計與源碼解析 電商后臺:實例解讀促銷系統 電商后臺系統包括商品管理系統、采購系統、倉儲系統、訂單系統、促銷系統、維權系統、財務系統、會員系統、權限系統等,各系統之間相互關聯、相互依托,為前端的正…

react-router-dom v6.1.1 使用方式

v5版本例子代碼 import {BrowserRouter as Router, Switch, Route} from react-router-dom import App from /App import Home from /views/Home/Home import Fast from /views/Fast/Fast import User from /views/User/Userconst BaseRouter () > {return (<Router>…

VC 2010下安裝OpenCV2.4.4

說明&#xff1a; 安裝平臺&#xff1a;32位XP&#xff0c;VS2010&#xff1b;OpenCV 2.4.4不支持VC 6.0&#xff1b;網上有很多用CMake編譯OpenCV的安裝教程&#xff0c;這里建議先不要自己編譯&#xff0c;如果使用預編譯好的庫有問題&#xff0c;再嘗試自己編譯。希望大家好…

vue3源碼中的最長遞增子序列

求解最長遞增子序列是一道經典的算法題, 多數解法是使用動態規劃的思想&#xff0c;算法的時間復雜度是O(); 而Vue.js內部使用的是維基百科提供的一套“貪心二分查找”的算法; 貪心算法的時間復雜度是O(n)&#xff0c;二分查找的時間復雜度是O(logn)&#xff0c;總時間復雜度…

認識“數字圖像”

不同領域的人對圖像的概念有著不同的理解。從工程學角度上講&#xff0c;“圖”是物體透射或反射光的分布&#xff1b;“像”是人的視覺系統對圖的接收在大腦中形成的印象或認識。因此&#xff0c;圖像常與光照、視覺等概念聯系在一起&#xff0c;光的強弱、光的波長以及物體的…

Java編程基礎階段筆記 day04 Java基礎語法(下)

? 面向對象編程 筆記Notes 面向對象三條學習主線 面向過程 VS 面向對象 類和對象 創建對象例子 面向對象的內存分析 類的屬性&#xff1a;成員變量 成員變量 VS 局部變量 類的方法 方法的重載 可變個數形參 面向對象&#xff1a;封裝性 訪問權限修飾符 構造方法&…

漢諾塔遞歸算法

起源&#xff1a; 漢諾塔&#xff08;又稱河內塔&#xff09;問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子…

Java編程基礎階段筆記 day 07 面向對象編程(上)

? 面向對象編程 筆記Notes 面向對象三條學習主線 面向過程 VS 面向對象 類和對象 創建對象例子 面向對象的內存分析 類的屬性&#xff1a;成員變量 成員變量 VS 局部變量 類的方法 方法的重載 可變個數形參 面向對象&#xff1a;封裝性 訪問權限修飾符 構造方法&…