摘要:一旦請(qǐng)求事件多了,就避免不了回調(diào)地獄,回調(diào)很可能容易一層接著一層。的意思是承諾,作用和回調(diào)函數(shù)相似,在未來(lái)的某個(gè)時(shí)刻執(zhí)行某件事情。但是的寫(xiě)法更加簡(jiǎn)約易用,更加符合我們平常的思維。
發(fā)布自Kindem的博客,歡迎大家轉(zhuǎn)載,但是要注意注明出處。另外,該文章收納在Kindem的個(gè)人的 IT 知識(shí)整理倉(cāng)庫(kù),歡迎 Star、Fork、投稿Promise
由于JavaScript是單線程的,所以回調(diào)是JavaScript中避免不了的,所有的網(wǎng)絡(luò)請(qǐng)求、瀏覽器事件都需要使用回調(diào)的方式異步處理。
一旦請(qǐng)求、事件多了,就避免不了回調(diào)地獄,回調(diào)很可能容易一層接著一層。
Promise的意思是承諾,作用和回調(diào)函數(shù)相似,在未來(lái)的某個(gè)時(shí)刻執(zhí)行某件事情。但是Promise的寫(xiě)法更加簡(jiǎn)約易用,更加符合我們平常的思維。
UsagePromise是一個(gè)對(duì)象,在ES6已經(jīng)被規(guī)范成了原生JavaScript的一部分,但是在ES6之前,則需要使用第三方庫(kù)來(lái)實(shí)現(xiàn)
Promise分為三個(gè)狀態(tài):
pending: 執(zhí)行中
resolved: 已完成
rejected: 已失敗
Promise對(duì)象被實(shí)例化的那一刻,傳入構(gòu)造函數(shù)的方法將會(huì)被執(zhí)行,并且進(jìn)入pending狀態(tài),而一旦完成或者失敗,則會(huì)進(jìn)入相應(yīng)的狀態(tài),這一過(guò)程是不可逆的
他的用法(ES6)如下:
let promise = new Promise((resolve, reject) => { if (...) { // 如果成功了 resolve(...); } else { // 如果失敗了 reject(...); } });
這里的resolve和reject兩個(gè)方法可以使用下面的方法來(lái)給與:
promise .then(onSuccess) .catch(onFailed);
傳遞給then的方法將在承諾執(zhí)行成功時(shí)被調(diào)用,傳遞給catch的方法將在承諾執(zhí)行失敗時(shí)被調(diào)用
更加方便的一點(diǎn)是,Promise往往可以嵌套使用,這樣可以是多個(gè)任務(wù)有條不紊地進(jìn)行,假設(shè)p1是一個(gè)Promise對(duì)象而p2、p3都是能夠產(chǎn)生Promise對(duì)象的方法(如果直接new那么Promise將會(huì)被直接執(zhí)行),那么你可以這樣寫(xiě),使得他們按照順序執(zhí)行,并且可以一次性處理他們產(chǎn)生的錯(cuò)誤
p1 .then(p2) .then(p3) .then(onSuccess) .catch(onFailed);
比如:
let p1 = new Promise((resolve, reject) => { console.log("p1"); setTimeout(() => { resolve("p2"); }, 1000) }); let p2 = (result) => new Promise((resolve, reject) => { console.log(result); setTimeout(() => { resolve("p3"); }, 2000); }); let p3 = (result) => new Promise((resolve, reject) => { console.log(result); setTimeout(() => { resolve("over"); }, 3000); }); p1 .then(p2) .then(p3) .then((result) => { console.log(result); }) .catch((error) => { console.log(error); });
運(yùn)行可以看見(jiàn):
p1 p2 p3 over
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96958.html
摘要:使用是極好的,它是如此有用以至于我覺(jué)得應(yīng)該好好研究一下,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。構(gòu)造函數(shù)檢查參數(shù)例如是不是函數(shù)啊初始化,創(chuàng)建對(duì)象執(zhí)行因此構(gòu)造函數(shù)里面?zhèn)魅氲氖橇⒓幢粓?zhí)行的。 使用Promise是極好的,它是如此有用以至于我覺(jué)得應(yīng)該好好研究一下Promise,甚至是實(shí)現(xiàn)一個(gè)簡(jiǎn)易的版本。實(shí)現(xiàn)之前,我們先來(lái)看看Promise的用途: 使用Promise callback hell Promi...
摘要:對(duì)于的來(lái)說(shuō)基元函數(shù)包括組合函數(shù)的類(lèi)型簽名返回情況完成如果傳入的可迭代對(duì)象為空,會(huì)同步地返回一個(gè)已完成狀態(tài)的。相反,如果是在指定的時(shí)間之后完成,剛返回結(jié)果就是一個(gè)拒絕狀態(tài)的從而觸發(fā)方法指定的回調(diào)函數(shù)。在行中,對(duì)每個(gè)小任務(wù)得到的結(jié)果進(jìn)行匯總。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 從ES6 開(kāi)始,我們大都使用的是 P...
摘要:從最開(kāi)始的到封裝后的都在試圖解決異步編程過(guò)程中的問(wèn)題。為了讓編程更美好,我們就需要引入來(lái)降低異步編程的復(fù)雜性。寫(xiě)一個(gè)符合規(guī)范并可配合使用的寫(xiě)一個(gè)符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來(lái)處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問(wèn)題描述 在開(kāi)發(fā)過(guò)程中,遇到一個(gè)需求:在系統(tǒng)初始化時(shí)通過(guò)http獲取一個(gè)第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個(gè)接口,可通過(guò)...
摘要:寫(xiě)在前面這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才詳解的設(shè)計(jì)和各種場(chǎng)景下如何使用。建議先了解和簡(jiǎn)單使用過(guò)后再閱讀,效果更佳。 寫(xiě)在前面:Promise這一章的順序?qū)τ谖唇佑|過(guò)使用過(guò)Promise的童鞋而言略抽象了,前邊幾章主要為了說(shuō)明Promise和之前的異步方式相比有什么優(yōu)勢(shì)和它能解決什么問(wèn)題,后邊才...
摘要:已完成意味著操作成功完成。處理實(shí)例實(shí)例生成以后,可以用方法分別指定狀態(tài)和狀態(tài)的回調(diào)函數(shù)。第二個(gè)回調(diào)函數(shù)在的狀態(tài)變成時(shí)被調(diào)用。方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。具體的使用示例如下情形一全部成功的情況結(jié)果為。 一.關(guān)于Promise promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案(回調(diào)函數(shù)和事件)更合理和更強(qiáng)大。它由社區(qū)最早提出和實(shí)現(xiàn),ES6將其寫(xiě)進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了...
摘要:構(gòu)造函數(shù)規(guī)定,對(duì)象是一個(gè)構(gòu)造函數(shù),用來(lái)生成實(shí)例。如果中的回調(diào)函數(shù)拋出一個(gè)錯(cuò)誤,那么返回的將會(huì)成為拒絕狀態(tài),并且將拋出的錯(cuò)誤作為拒絕狀態(tài)的回調(diào)函數(shù)的參數(shù)值。 其實(shí)想寫(xiě) Promise 的使用已經(jīng)很長(zhǎng)時(shí)間了。一個(gè)是在實(shí)際編碼的過(guò)程中經(jīng)常用到,一個(gè)是確實(shí)有時(shí)候小伙伴們?cè)谑褂脮r(shí)也會(huì)遇到一些問(wèn)題。Promise 也確實(shí)是 ES6 中 對(duì)于寫(xiě) JS 的方式,有著真正最大影響的 API 特性之一。本...
閱讀 466·2021-10-09 09:57
閱讀 470·2019-08-29 18:39
閱讀 811·2019-08-29 12:27
閱讀 3028·2019-08-26 11:38
閱讀 2667·2019-08-26 11:37
閱讀 1286·2019-08-26 10:59
閱讀 1377·2019-08-26 10:58
閱讀 989·2019-08-26 10:48