摘要:不管對象最后結(jié)果如何,都會執(zhí)行的操作,方法中的回調(diào)函數(shù)不接受任何參數(shù)方法用于將多個實例包裝成一個新的實例只有的狀態(tài)都變成,的狀態(tài)才會變成,此時的返回值組成一個數(shù)組,傳遞給的回調(diào)函數(shù)。
簡介
promise對象可以獲取異步操作的消息,提供統(tǒng)一的API,各個異步操作都可以用同樣的方法進(jìn)行處理。
promise對象不受外界影響,其有三種狀態(tài):pending(進(jìn)行中)、fulfilled(成功)、rejected(失?。?,只有異步操作的結(jié)果可以決定當(dāng)前狀態(tài),一旦狀態(tài)改變就不可以再變化,狀態(tài)改變方向有兩種:pending -> fulfilled、pending -> rejected
promise對象的意義就在于將異步操作以同步操作的流程表達(dá),避免層層嵌套的回調(diào)函數(shù)
let promise = new Promise(function (resolve, reject) { if () { resolve(value) // 異步操作成功 } else { reject(error) // 失敗拋錯 } })
Promise構(gòu)造函數(shù)接受一個函數(shù)作為參數(shù),該函數(shù)有兩個參數(shù):resolve、reject,當(dāng)執(zhí)行resolve函數(shù)時Promise對象狀態(tài)pending -> fulfilled,當(dāng)執(zhí)行reject時Promise對象狀態(tài)pending -> rejected
promise.then(function (value) { }, function (error) { })
Promise實例生成以后,可以用then方法分別指定resolved狀態(tài)和rejected狀態(tài)的回調(diào)函數(shù),第二個參數(shù)為可選參數(shù),例子:
let promise = new Promise(function (resolve, reject) { console.log("promise") resolve("11") }) promise.then(function (value) { console.log(value) }) console.log("22")
執(zhí)行結(jié)果"promise -> 22 -> 11",promise對象新建后立即執(zhí)行,then方法的回調(diào)會在所有同步任務(wù)執(zhí)行完成后執(zhí)行
catchpromise.prototype.catch()是then()方法的別名,用于指定發(fā)生錯誤時的回調(diào)函數(shù)
new Promise(function () { }).then(() => { }).catch(err => { console.log(err) })
如果異步操作拋出錯誤,狀態(tài)就會變?yōu)閞eject,就會調(diào)用catch中的回調(diào),當(dāng)狀態(tài)為resolve,執(zhí)行then方法中的回調(diào)時,若報錯同樣回進(jìn)入catch的回調(diào)
意義:當(dāng)我們使用promise異步操作時,但是沒有使用catch捕獲錯誤時,若promise異步執(zhí)行報錯時,外部代碼并不會接收到錯誤,而是繼續(xù)執(zhí)行不受影響
const someAsyncThing = function() { return new Promise(function(resolve, reject) { resolve(x); }); }; someAsyncThing().then(function() { console.log("ok"); }); setTimeout(() => { console.log("continue") }, 100);
如代碼所示,x變量并沒有定義,期待的操作是執(zhí)行報錯,然后停止運行,實際上‘continue’會執(zhí)行輸出,這說明當(dāng)沒有catch捕獲錯誤時,外部代碼不會知道Promise對象內(nèi)部執(zhí)行已經(jīng)報錯,因此會繼續(xù)執(zhí)行。
finally不管Promise對象最后結(jié)果如何,都會執(zhí)行的操作,finally方法中的回調(diào)函數(shù)不接受任何參數(shù)
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});all
Promise.all方法用于將多個Promise實例包裝成一個新的實例
Promise.all([p1,p2,p3]).then((array) => { }).catch((err) => { })
只有p1、p2、p3的狀態(tài)都變成fulfilled,p的狀態(tài)才會變成fulfilled,此時p1、p2、p3的返回值組成一個數(shù)組,傳遞給p的回調(diào)函數(shù)。
只要p1、p2、p3之中有一個被rejected,p的狀態(tài)就變成rejected,此時第一個被reject的實例的返回值,會傳遞給p的回調(diào)函數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/93128.html
摘要:入門之基本用法背景在我們使用異步函數(shù)比如進(jìn)行編寫代碼,如果我們需要很多個請求不同的接口,而下一個接口需要依賴上一個接口的返回值,這樣,我們的代碼則需要在各種回調(diào)函數(shù)中嵌套,這樣一層一層地下去,就形成了回調(diào)地獄。 Promise入門之基本用法 背景 在我們使用異步函數(shù)比如ajax進(jìn)行編寫代碼,如果我們需要很多個ajax請求不同的接口,而下一個接口需要依賴上一個接口的返回值,這樣,我們的代...
摘要:關(guān)于的入門了解新增模板字符串為提供了簡單的字符串插值功能箭頭函數(shù)操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值。將對象納入規(guī)范,提供了原生的對象。增加了和命令,用來聲明變量。 關(guān)于ES6的入門了解 新增模板字符串(為JavaScript提供了簡單的字符串插值功能)、箭頭函數(shù)(操作符左邊為輸入的參數(shù),而右邊則是進(jìn)行的操作以及返回的值Inputs=>outputs。)、for-o...
摘要:對象的狀態(tài)不受外界影響。如果改變已經(jīng)發(fā)生了,你再對對象添加回調(diào)函數(shù),也會立即得到這個結(jié)果。會等中的對象全部執(zhí)行完后將數(shù)組傳入回調(diào)函數(shù)中與不同的是只要之中有一個實例率先改變狀態(tài),的狀態(tài)就跟著改變。 Promise對象 剛學(xué)習(xí)完,有點粗略印象。整理記錄一下以便后續(xù)學(xué)習(xí)補充,加深理解。 Promise是什么 Promise是構(gòu)造函數(shù),可以通過new來生成Promise對象。 Promise有...
摘要:優(yōu)點按需加載可以寫中路徑也可以動態(tài)加以后默認(rèn)就是嚴(yán)格模式,默認(rèn)嚴(yán)格模式完參考視頻資料經(jīng)典入門到進(jìn)階 上一篇:ES6入門到進(jìn)階(一):let、解構(gòu)賦值、字符串模板、函數(shù) 一、循環(huán) ES5里面新增一些東西 1.1 arr.forEach()(常用) 1. for for(let i=0; i [{t:aaaa}] let arr = [ ...
摘要:今天來學(xué)習(xí)下吧其實這在筆試上也是一個考點基本介紹對象是熟悉的名字吧工作組提出的規(guī)范原本只是社區(qū)提出的構(gòu)想一些外部函數(shù)庫率先實現(xiàn)了該功能中將其寫入了語言標(biāo)準(zhǔn)目的為異步操作提供統(tǒng)一接口是啥它就是一個中一個對象起著代理作用充當(dāng)異步操作與回調(diào)函 今天來學(xué)習(xí)下Promise吧,其實這在筆試上也是一個考點. 基本介紹 Promise對象是CommonJS(熟悉的名字吧- -)工作組提出的規(guī)范.Pr...
閱讀 1013·2021-09-27 13:36
閱讀 1058·2021-09-08 09:35
閱讀 1147·2021-08-12 13:25
閱讀 1502·2019-08-29 16:52
閱讀 2990·2019-08-29 15:12
閱讀 2797·2019-08-29 14:17
閱讀 2697·2019-08-26 13:57
閱讀 1079·2019-08-26 13:51