摘要:對(duì)象用于表示一個(gè)異步操作的最終狀態(tài)完成或失敗,以及其返回的值。構(gòu)造函數(shù)執(zhí)行時(shí)立即調(diào)用函數(shù),和兩個(gè)函數(shù)作為參數(shù)傳遞給函數(shù)在構(gòu)造函數(shù)返回新建對(duì)象前被調(diào)用。與回調(diào)函數(shù)返回的結(jié)果為不同,的結(jié)果為。
Promise 對(duì)象用于表示一個(gè)異步操作的最終狀態(tài)(完成或失敗),以及其返回的值。大多數(shù)人都在使用由其他函數(shù)創(chuàng)建并返回的
promise對(duì)象是由關(guān)鍵字 new 及其構(gòu)造函數(shù)來創(chuàng)建的。該構(gòu)造函數(shù)會(huì)?把一個(gè)叫做“處理器函數(shù)”(executor function)的函數(shù)作為它的參數(shù)。這個(gè)“處理器函數(shù)”接受兩個(gè)函數(shù)——resolve 和 reject ——作為其參數(shù)。當(dāng)異步任務(wù)順利完成且返回結(jié)果值時(shí),會(huì)調(diào)用 resolve 函數(shù);而當(dāng)異步任務(wù)失敗且返回失敗原因(通常是一個(gè)錯(cuò)誤對(duì)象)時(shí),會(huì)調(diào)用reject 函數(shù)。
語(yǔ)法new Promise( function(resolve, reject) {...} /* executor */ );
參數(shù)
executor
executor是帶有 resolve 和 reject 兩個(gè)參數(shù)的函數(shù) 。Promise構(gòu)造函數(shù)執(zhí)行時(shí)立即調(diào)用executor 函數(shù), resolve 和 reject 兩個(gè)函數(shù)作為參數(shù)傳遞給executor(executor 函數(shù)在Promise構(gòu)造函數(shù)返回新建對(duì)象前被調(diào)用)。resolve 和 reject 函數(shù)被調(diào)用時(shí),分別將promise的狀態(tài)改為fulfilled(完成)或rejected(失敗)。executor 內(nèi)部通常會(huì)執(zhí)行一些異步操作,一旦完成,可以調(diào)用resolve函數(shù)來將promise狀態(tài)改成fulfilled,或者在發(fā)生錯(cuò)誤時(shí)將它的狀態(tài)改為rejected。
如果在executor函數(shù)中拋出一個(gè)錯(cuò)誤,那么該promise 狀態(tài)為rejected。executor函數(shù)的返回值被忽略。
流程
Promise有以下幾種狀態(tài):方法
pending: 初始狀態(tài),既不是成功,也不是失敗狀態(tài)。
fulfilled: 意味著操作成功完成。 調(diào)用resolve方法傳遞值到then方法調(diào)用promise的then里面的onFullfillment()
rejected: 意味著操作失敗。 調(diào)用reject方法傳遞值到then方法調(diào)用promise的then里面的onReject();或者調(diào)用promise的catch()
Promise.prototype.then(onFulfilled, onRejected):添加一個(gè)拒絕(rejection) 回調(diào)到當(dāng)前 promise, 返回一個(gè)新的promise。
Promise.prototype.catch(onRejected);
Promise.prototype.finally(onFinally)
1)、Promise.prototype.then(onFulfilled,onRejected); 處理Promise狀態(tài)變?yōu)閞ejected或fulfilled
最多需要有兩個(gè)參數(shù):Promise 的成功和失敗情況的回調(diào)函數(shù)。
如果忽略針對(duì)某個(gè)狀態(tài)的回調(diào)函數(shù)參數(shù),這個(gè)新 Promise 只是簡(jiǎn)單地接受調(diào)用這個(gè) then 的原 Promise的終態(tài)作為它的終態(tài)。
如果傳入的參數(shù) 不是函數(shù),則會(huì)在內(nèi)部被替換為(x) => x ,即原樣返回 promise 最終結(jié)果的函數(shù)。
參數(shù):onFulfilled回調(diào)函數(shù)的參數(shù)為(the fulfillment value),onRejected 回調(diào)函數(shù)的參數(shù)為(the rejection reason)。
返回值:返回一個(gè)Promise,而它的行為與then中的回調(diào)函數(shù)的返回值有關(guān)。
1、then的回調(diào)函數(shù)返回一個(gè)值,then返回一個(gè)完成狀態(tài)的Promise;
2、then的回調(diào)函數(shù)拋出一個(gè)錯(cuò)誤,then返回一個(gè)拒絕狀態(tài)的Promise
3、then的回調(diào)函數(shù)返回一個(gè)已完成或已拒絕Promise,then返回一個(gè)相同狀態(tài)和值的Promise;
4、then的回調(diào)函數(shù)返回一個(gè)Pending的Pormise,then返回一個(gè)狀態(tài),完成和拒絕回調(diào)函數(shù)一樣的Promise
2)、Promise.prototype.catch(onRejected)方法返回一個(gè)Promise,并且處理拒絕的情況。 在resolve()后面拋出的錯(cuò)誤會(huì)被忽略
事實(shí)上, calling obj.catch(onRejected) 內(nèi)部calls obj.then(undefined, onRejected)
參數(shù):onRejected 回調(diào)函數(shù)的參數(shù)為(the rejection reason)。
返回值:返回一個(gè)Promise,回調(diào)函數(shù)onRejected 拋出一個(gè)錯(cuò)誤或返回一個(gè)本身失敗的 Promise , 返回的rejected 的Promise;否則,返回完成狀態(tài)的Promise;
3)、Promise.prototype.finally(): 方法返回一個(gè)Promise,在執(zhí)行then()和catch()后,都會(huì)執(zhí)行finally指定的回調(diào)函數(shù)。避免同樣的語(yǔ)句需要在then()和catch()中各寫一次的情況。回調(diào)函數(shù)無入?yún)?/b>,返回的新Promise默認(rèn)返回當(dāng)前Promise的(the fulfillment value)或(the rejection reason)。
與Promise.resolve(2).then(() => {}, () => {}) (回調(diào)函數(shù)返回undefined)(resolved的結(jié)果為undefined)不同,Promise.resolve(2).finally(() => {}) resolved的結(jié)果為 2。
同樣,Promise.reject(3).then(() => {}, () => {})(回調(diào)函數(shù)返回undefined) (resolved 的結(jié)果為undefined), Promise.reject(3).finally(() => {}) rejected 的結(jié)果為 3。
finally的回調(diào)函數(shù)拋出錯(cuò)誤或返回rejected狀態(tài)的Promise,finally將返回一個(gè)rejected的Promise.
4)、Promise.all(iterable)
參數(shù):一個(gè)可迭代對(duì)象,如 Array 或 String。
返回值:
1、如果傳入的參數(shù)是一個(gè)空的可迭代對(duì)象或無任何Promise對(duì)象,返回已完成(already resolved)狀態(tài)的 Promise。空可迭代對(duì)象同步返回。
2、其他情況,異步返回一個(gè)處理中(pending)的Promise。
all返回的Promise完成狀態(tài)的結(jié)果都是一個(gè)數(shù)組,它包含所有的傳入迭代參數(shù)對(duì)象的值(也包括非 promise 值)。有一個(gè)Promise失敗的時(shí)候,失敗的那個(gè)結(jié)果給失敗狀態(tài)的回調(diào)函數(shù),而不管其它 promise 是否完成。
5)、Promise.race(iterable) 方法返回一個(gè) pending promise,一旦迭代器中的某個(gè)promise解決或拒絕,返回的 promise就會(huì)解決或拒絕。
參數(shù):一個(gè)可迭代對(duì)象,如 Array 或 String。
返回值:如果傳的迭代是空的,則返回的 promise 將永遠(yuǎn)等待;如果迭代包含一個(gè)或多個(gè)Promise和/或已解決/拒絕的Promise,則 Promise.race 將解析為迭代中找到的第一個(gè)值。
6)、Promise.reject(reason)方法返回一個(gè)帶有拒絕原因reason參數(shù)的Promise對(duì)象。
7)、Promise.resolve(value)方法返回一個(gè)以給定值解析后的Promise 對(duì)象。
參數(shù):Promise對(duì)象解析的參數(shù)。也可以是一個(gè)Promise對(duì)象,或者是一個(gè)thenable。
返回值:一個(gè)解析過帶著給定值的Promise對(duì)象,如果返回值是一個(gè)promise對(duì)象,則直接返回這個(gè)Promise對(duì)象。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/97319.html
摘要:意味著操作成功完成。方法接收失敗情況的回調(diào)函數(shù)作為參數(shù),返回一個(gè)對(duì)象。參數(shù)回調(diào)函數(shù)不接收任何參數(shù),當(dāng)對(duì)象變成狀態(tài)時(shí)被調(diào)用。現(xiàn)在各個(gè)方法的參數(shù)返回值功能和使用方法已經(jīng)有個(gè)大概的了解了,為了進(jìn)一步理解其原理,接下來我打算簡(jiǎn)單地實(shí)現(xiàn)一下它。 前言 最近幾周參加筆試面試,總是會(huì)遇到實(shí)現(xiàn)異步和處理異步的問題,然而作者每次都無法完美地回答。在最近一次筆試因?yàn)?Promise 而被刷掉后,我終于下定...
摘要:反之,操作失敗,對(duì)象由狀態(tài)轉(zhuǎn)換為狀態(tài),此時(shí)回調(diào)函數(shù)會(huì)執(zhí)行方法。這里需要注意的是,雖然在之后便執(zhí)行了方法,但是并不是意味著往后的對(duì)象不執(zhí)行了,其他的還是對(duì)象還是要執(zhí)行的,只是不會(huì)再調(diào)用函數(shù)。 在 掘金上看見一篇寫promise的文章,感覺作者寫的很棒,文章鏈接在這:八段代碼徹底掌握 Promise 。看完之后感覺學(xué)到了很多,所以又重新把JavaScript Promise迷你書(中文版)...
摘要:總結(jié)用方法創(chuàng)建對(duì)象用或添加對(duì)象的處理函數(shù)它的作用是為實(shí)例添加狀態(tài)改變時(shí)的回調(diào)函數(shù)。方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。 一、為什么需要Promise Javascript 采用回調(diào)函數(shù)(callback)來處理異步編程。從同步編程到異步回調(diào)編程有一個(gè)適應(yīng)的過程,但是如果出現(xiàn)多層回調(diào)嵌套,也就是我們常說的回調(diào)金字塔(Pyramid of Doom),絕對(duì)是一種糟糕的編程體驗(yàn)。于是...
摘要:方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。由于字符串不屬于異步操作判斷方法是字符串對(duì)象不具有方法,返回實(shí)例的狀態(tài)從一生成就是,所以回調(diào)函數(shù)會(huì)立即執(zhí)行。出錯(cuò)了等同于出錯(cuò)了出錯(cuò)了上面的代碼生成一個(gè)對(duì)象的實(shí)例,狀態(tài)為,回調(diào)函數(shù)會(huì)立即執(zhí)行。 引言 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)和事件——更合理且強(qiáng)大。最近的項(xiàng)目要用到這個(gè),就參照阮一峰老師的《ES6標(biāo)準(zhǔn)入門...
摘要:的實(shí)現(xiàn)說明沒有執(zhí)行里的函數(shù)說明執(zhí)行了里的函數(shù)說明執(zhí)行里的函數(shù)過程中出現(xiàn)錯(cuò)誤和執(zhí)行狀態(tài)時(shí)的回調(diào)函數(shù)后返回的結(jié)果都需要執(zhí)行傳進(jìn)來的對(duì)象不能等于當(dāng)前的對(duì)象回調(diào)返回的值或者的值是對(duì)象時(shí)需要等待該對(duì)象的狀態(tài)變更設(shè)置當(dāng)前狀態(tài)的狀態(tài)和值執(zhí)行回調(diào)隊(duì)列里的函 function resolve_promise_value(promise,value) {//PromiseA+的實(shí)現(xiàn) var th...
摘要:則是把類似的異步處理對(duì)象和處理規(guī)則進(jìn)行規(guī)范化,并按照采用統(tǒng)一的接口來編寫,而采取規(guī)定方法之外的寫法都會(huì)出錯(cuò)。這個(gè)對(duì)象有一個(gè)方法,指定回調(diào)函數(shù),用于在異步操作執(zhí)行完后執(zhí)行回調(diào)函數(shù)處理。到目前為止,已經(jīng)學(xué)習(xí)了創(chuàng)建對(duì)象和用,方法來注冊(cè)回調(diào)函數(shù)。 Promise 本文從js的異步處理出發(fā),引入Promise的概念,并且介紹Promise對(duì)象以及其API方法。 js里的異步處理 可以參考這篇文章...
閱讀 2551·2023-04-26 00:57
閱讀 922·2021-11-25 09:43
閱讀 2228·2021-11-11 16:55
閱讀 2231·2019-08-30 15:53
閱讀 3600·2019-08-30 15:52
閱讀 1468·2019-08-30 14:10
閱讀 3386·2019-08-30 13:22
閱讀 1218·2019-08-29 11:18