国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ES6知識(shí)】Promise 對(duì)象

這篇具有很好參考價(jià)值的文章主要介紹了【ES6知識(shí)】Promise 對(duì)象。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.1 概述

Promise 對(duì)象用于表示一個(gè)異步操作的最終完成(或失?。┘捌浣Y(jié)果值。是異步編程的一種解決方案(可以解決回調(diào)地獄問(wèn)題)。

一個(gè) Promise 對(duì)象代表一個(gè)在這個(gè) promise 被創(chuàng)建出來(lái)時(shí)不一定已知值的代理。它讓你能夠把異步操作最終的成功返回值或者失敗原因和相應(yīng)的處理程序關(guān)聯(lián)起來(lái)。這樣使得異步方法可以像同步方法那樣返回值:異步方法并不會(huì)立即返回最終的值,而是會(huì)返回一個(gè) promise,以便在未來(lái)某個(gè)時(shí)候把值交給使用者。

原生JavaScipt案例合集
JavaScript +DOM基礎(chǔ)
JavaScript 基礎(chǔ)到高級(jí)
Canvas游戲開(kāi)發(fā)

一個(gè) Promise 必然處于以下幾種狀態(tài)之一:

  • 待定(pending):初始狀態(tài),既沒(méi)有被兌現(xiàn),也沒(méi)有被拒絕。
  • 已兌現(xiàn)(fulfilled):意味著操作成功完成。
  • 已拒絕(rejected):意味著操作失敗。

Promise 對(duì)象只有:從 pending 變?yōu)?fulfilled 和從 pending 變?yōu)?rejected 的狀態(tài)改變。只要處于 fulfilled 和 rejected ,狀態(tài)就不會(huì)再變了即 resolved(已定型)。

Promise 對(duì)象一旦新建它就會(huì)立即執(zhí)行,中途無(wú)法取消。

【ES6知識(shí)】Promise 對(duì)象,前端開(kāi)發(fā),ES6,es6,javascript,前端,promise

我們可以用 Promise.prototype.then()、Promise.prototype.catch()Promise.prototype.finally() 這些方法將進(jìn)一步的操作與一個(gè)變?yōu)橐亚枚顟B(tài)的 promise 關(guān)聯(lián)起來(lái)。

例如 .then() 方法需要兩個(gè)參數(shù),第一個(gè)參數(shù)作為處理已兌現(xiàn)狀態(tài)的回調(diào)函數(shù),而第二個(gè)參數(shù)則作為處理已拒絕狀態(tài)的回調(diào)函數(shù)。每一個(gè) .then() 方法還會(huì)返回一個(gè)新生成的 promise 對(duì)象,這個(gè)對(duì)象可被用作鏈?zhǔn)秸{(diào)用,就像這樣:

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('foo');
  }, 300);
});

myPromise
  .then(value => { return value + ' and bar'; })
  .then(value => { return value + ' and bar again'; })
  .then(value => { return value + ' and again'; })
  .then(value => { return value + ' and again'; })
  .then(value => { console.log(value) })
  .catch(err => { console.log(err) });

在沒(méi)有迫切需要的情況下,可以在最后一個(gè) .catch() 語(yǔ)句時(shí)再進(jìn)行錯(cuò)誤處理,這種做法更加簡(jiǎn)單。過(guò)早地處理變?yōu)橐丫芙^狀態(tài)的 promise 會(huì)對(duì)之后 promise 的鏈?zhǔn)秸{(diào)用造成影響,除非我們需要馬上處理這個(gè)錯(cuò)誤,例如,外面必須拋出某種類型的錯(cuò)誤以在鏈?zhǔn)秸{(diào)用中傳遞錯(cuò)誤狀態(tài)。。

1.2 靜態(tài)方法

Promise.all()Promise.race() 是并行運(yùn)行異步操作的兩個(gè)組合式工具。

  • Promise.all(iterable) 這個(gè)方法返回一個(gè)新的 promise 對(duì)象,等到所有的 promise 對(duì)象都成功或有任意一個(gè) promise 失敗。如果所有的 promise 都成功了,它會(huì)把一個(gè)包含 iterable 里所有 promise 返回值的數(shù)組作為成功回調(diào)的返回值。順序跟 iterable 的順序保持一致。一旦有任意一個(gè) iterable 里面的 promise 對(duì)象失敗則立即以該 promise 對(duì)象失敗的理由來(lái)拒絕這個(gè)新的 promise。
  • Promise.race(iterable) 等到任意一個(gè) promise 的狀態(tài)變?yōu)橐亚枚?。?dāng) iterable 參數(shù)里的任意一個(gè)子 promise 成功或失敗后,父 promise 馬上也會(huì)用子 promise 的成功返回值或失敗詳情作為參數(shù)調(diào)用父 promise 綁定的相應(yīng)處理函數(shù),并返回該 promise 對(duì)象。
const p1 = getCmpData("basicSetting");
var p2 = null;
if (that.isOnlineForm) {
	p2 = getCmpData("formDesign");
} else {
	p2 = new Promise(function (resolve, reject) {
        resolve(null);
    });
}
const p3 = getCmpData("processDesign");

Promise.all([p1, p2, p3])
.then((res) => {
  const param = {};
  this.sendToServer(param); //接口調(diào)用傳參
})
.catch((err) => {//錯(cuò)誤信息處理
  err.target && (this.activeStep = err.target);
  err.msg && this.$message.warning(err.msg);
});
  • Promise.allSettled(iterable) 等到所有 promise 都已敲定(每個(gè) promise 都已兌現(xiàn)或已拒絕)。返回一個(gè) promise,該 promise 在所有 promise 都敲定后完成,并兌現(xiàn)一個(gè)對(duì)象數(shù)組,其中的對(duì)象對(duì)應(yīng)每個(gè) promise 的結(jié)果。
  • Promise.any(iterable) 接收一個(gè) promise 對(duì)象的集合,當(dāng)其中的任意一個(gè) promise 成功,就返回那個(gè)成功的 promise 的值。

Promise.resolve()Promise.reject() 是手動(dòng)創(chuàng)建一個(gè)已經(jīng) resolve 或者 reject 的 Promise 快捷方法。它們有時(shí)很有用。

  • Promise.reject(reason) 返回一個(gè)狀態(tài)為已拒絕的 Promise 對(duì)象,并將給定的失敗信息傳遞給對(duì)應(yīng)的處理函數(shù)。
  • Promise.resolve(value) 返回一個(gè)狀態(tài)由給定 value 決定的 Promise 對(duì)象。如果該值是 thenable(即,帶有 then 方法的對(duì)象),返回的 Promise 對(duì)象的最終狀態(tài)由 then 方法執(zhí)行結(jié)果決定;否則,返回的 Promise 對(duì)象狀態(tài)為已兌現(xiàn),并且將該 value 傳遞給對(duì)應(yīng)的 then 方法。
[func1, func2, func3].reduce((p, f) => p.then(f), Promise.resolve())
.then(result3 => { /* use result3 */ });

通常而言,如果你不知道一個(gè)值是否是 promise 對(duì)象,使用 Promise.resolve(value) 來(lái)返回一個(gè) Promise 對(duì)象,這樣就能將該 value 以 promise 對(duì)象形式使用。

1.3 實(shí)例方法

  • Promise.prototype.then() 為 promise 添加被兌現(xiàn)和被拒絕狀態(tài)的回調(diào)函數(shù),其以回調(diào)函數(shù)的返回值兌現(xiàn) promise。若不處理已兌現(xiàn)或者已拒絕狀態(tài)(例如,onFulfilledonRejected 不是一個(gè)函數(shù)),則返回 promise 被敲定時(shí)的值。
  • Promise.prototype.catch() 為 promise 添加一個(gè)被拒絕狀態(tài)的回調(diào)函數(shù),并返回一個(gè)新的 promise,若回調(diào)函數(shù)被調(diào)用,則兌現(xiàn)其返回值,否則兌現(xiàn)原來(lái)的 promise 兌現(xiàn)的值。
  • Promise.prototype.finally() 為 promise 添加一個(gè)回調(diào)函數(shù),并返回一個(gè)新的 promise。這個(gè)新的 promise 將在原 promise 被兌現(xiàn)時(shí)兌現(xiàn)。而傳入的回調(diào)函數(shù)將在原 promise 被敲定(無(wú)論被兌現(xiàn)還是被拒絕)時(shí)被調(diào)用。

1.4 Promise 拒絕事件

當(dāng) Promise 被拒絕時(shí),會(huì)有下文所述的兩個(gè)事件之一被派發(fā)到全局作用域(通常而言,就是window;如果是在 web worker 中使用的話,就是 Worker 或者其他 worker-based 接口)。這兩個(gè)事件如下所示:

  • rejectionhandled 當(dāng) Promise 被拒絕、并且在 reject 函數(shù)處理該 rejection 之后會(huì)派發(fā)此事件。
  • unhandledrejection 當(dāng) Promise 被拒絕,但沒(méi)有提供 reject 函數(shù)來(lái)處理該 rejection 時(shí),會(huì)派發(fā)此事件。

以上兩種情況中,PromiseRejectionEvent 事件都有兩個(gè)屬性,一個(gè)是 promise 屬性,該屬性指向被駁回的 Promise,另一個(gè)是 reason (en-US) 屬性,該屬性用來(lái)說(shuō)明 Promise 被駁回的原因。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-729041.html

window.addEventListener("unhandledrejection", event => {
  /* 你可以在這里添加一些代碼,以便檢查
     event.promise 中的 promise 和
     event.reason 中的 rejection 原因 */

  event.preventDefault();
}, false);

到了這里,關(guān)于【ES6知識(shí)】Promise 對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ES6基礎(chǔ)知識(shí)三:對(duì)象新增了哪些擴(kuò)展?

    ES6基礎(chǔ)知識(shí)三:對(duì)象新增了哪些擴(kuò)展?

    一、屬性的簡(jiǎn)寫(xiě) ES6中,當(dāng)對(duì)象鍵名與對(duì)應(yīng)值名相等的時(shí)候,可以進(jìn)行簡(jiǎn)寫(xiě) 方法也能夠進(jìn)行簡(jiǎn)寫(xiě) 在函數(shù)內(nèi)作為返回值,也會(huì)變得方便很多 注意:簡(jiǎn)寫(xiě)的對(duì)象方法不能用作構(gòu)造函數(shù),否則會(huì)報(bào)錯(cuò) 二、屬性名表達(dá)式 ES6 允許字面量定義對(duì)象時(shí),將表達(dá)式放在括號(hào)內(nèi) 表達(dá)式還可以

    2024年02月15日
    瀏覽(25)
  • ES6 Promise 詳解

    ES6 Promise 詳解

    目錄 一、Promise基本介紹 二、Promise實(shí)現(xiàn)多次請(qǐng)求 ? ? ? ? 1.傳統(tǒng)Ajax方式實(shí)現(xiàn)多次請(qǐng)求 :? ? ? ? ? ? ? 1.1 json數(shù)據(jù)準(zhǔn)備 ? ? ? ? ? ? 1.2 JQuery操作Ajax ? ? ? ? 2.使用ES6新特性Promise方式?:? 三、Promise代碼重排優(yōu)化 ? ? ? ? 1.問(wèn)題分析 :? ? ? ? ? 2.代碼優(yōu)化 :? ? ? ? ? ? ? 2

    2024年02月08日
    瀏覽(23)
  • ES6 -   promise(1)

    ES6 - promise(1)

    今天決定對(duì)之前學(xué)過(guò)的一些前端的知識(shí)進(jìn)行梳理和總結(jié),因?yàn)樽罱际仟?dú)自承擔(dān)項(xiàng)目的開(kāi)發(fā)與搭建,所以先從前后端交互的第一線axios來(lái)梳理,復(fù)習(xí)axios首先一定要先復(fù)習(xí)promise對(duì)象。 promise對(duì)象是ES6新引入的一個(gè)解決異步編程的方案。首先我們要知道前端比較常見(jiàn)的兩種異步編

    2024年02月08日
    瀏覽(30)
  • ES6-10:Promise

    前端開(kāi)發(fā)因?yàn)榫W(wǎng)絡(luò)交互的存在,產(chǎn)生了一種最常見(jiàn)的獨(dú)特場(chǎng)景——異步,即程序執(zhí)行的過(guò)程并非完全按照代碼的書(shū)寫(xiě)順序執(zhí)行。異步編程的解決方法有①回調(diào)函數(shù)、②事件、③Promise、④觀察者對(duì)象; Promise是ES6提供的一種異步編程的一種解決方案。簡(jiǎn)單來(lái)書(shū)就是一個(gè)容器,里

    2024年02月08日
    瀏覽(29)
  • JavaScript Es6_2筆記 (深入對(duì)象 + 內(nèi)置構(gòu)造函數(shù) + 包裝類型)+包含實(shí)例方法

    了解面向?qū)ο缶幊痰幕A(chǔ)概念及構(gòu)造函數(shù)的作用,體會(huì) JavaScript 一切皆對(duì)象的語(yǔ)言特征,掌握常見(jiàn)的對(duì)象屬性和方法的使用。 了解面向?qū)ο缶幊讨械囊话愀拍?能夠基于構(gòu)造函數(shù)創(chuàng)建對(duì)象 理解 JavaScript 中一切皆對(duì)象的語(yǔ)言特征 理解引用對(duì)象類型值存儲(chǔ)的的

    2024年02月12日
    瀏覽(52)
  • 【ES6】Promise.all用法

    【ES6】Promise.all用法

    Promise.all()方法用于將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。 上面代碼中,Promise.all()方法接受一個(gè)數(shù)組作為參數(shù),p1、p2、p3都是 Promise 實(shí)例,如果不是,就會(huì)先調(diào)用下面講到的Promise.resolve方法,將參數(shù)轉(zhuǎn)為 Promise 實(shí)例,再進(jìn)一步處理。另外,Promise.all()方法的參數(shù)可以

    2024年02月09日
    瀏覽(18)
  • 第一章前端開(kāi)發(fā)ES6基礎(chǔ)

    認(rèn)識(shí)ES6 概述 ES6表示ECMAScript規(guī)范的第六版,正式名稱為 ECMAScript 2015 ,ECMAScript是由ECMA國(guó)際標(biāo)準(zhǔn)組織制定的一項(xiàng) 腳本語(yǔ)言 的標(biāo)準(zhǔn)規(guī)范化,引入了許多新特性和語(yǔ)法。 其中包括 箭頭函數(shù)、let和const聲明、類、模板字符串、解構(gòu)賦值、參數(shù)默認(rèn)值、展開(kāi)操作符、Promise 等等。這些

    2024年02月08日
    瀏覽(18)
  • 第二章前端開(kāi)發(fā)ES6基礎(chǔ)

    目錄 擴(kuò)展運(yùn)算符 概述 語(yǔ)法 應(yīng)用 模板字符串 概述 應(yīng)用 內(nèi)置對(duì)象擴(kuò)展 概述 數(shù)組擴(kuò)展方法 字符串?dāng)U展方法 set數(shù)據(jù)結(jié)構(gòu) 概述 基本使用 操作方法 遍歷方法 認(rèn)識(shí)symbol 概述 作用 基本使用 項(xiàng)目 擴(kuò)展運(yùn)算符 概述 擴(kuò)展運(yùn)算符(spread operator)是 ES6 中新增的一種運(yùn)算符,用 三個(gè)點(diǎn)(

    2024年02月07日
    瀏覽(25)
  • 【ES6】Promise.allSettled的用法

    【ES6】Promise.allSettled的用法

    Promise.allSettled() 是一個(gè)Promise方法,用于處理一個(gè)Promise數(shù)組,返回一個(gè)新的Promise數(shù)組,每個(gè)元素對(duì)應(yīng)原始Promise的狀態(tài)。這個(gè)方法可以用于處理多個(gè)異步操作,并且能夠獲取每個(gè)操作的結(jié)果和狀態(tài)。 下面是Promise.allSettled()的詳細(xì)代碼示例: 輸出結(jié)果: 在上面的代碼中,我們創(chuàng)

    2024年02月10日
    瀏覽(23)
  • 【ES6】Promise.race的用法

    【ES6】Promise.race的用法

    Promise.race()方法同樣是將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例。 上面代碼中,只要p1、p2、p3之中有一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個(gè)率先改變的 Promise 實(shí)例的返回值,就傳遞給p的回調(diào)函數(shù)。 Promise.race()方法的參數(shù)與Promise.all()方法一樣,如果不是 Pr

    2024年02月10日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包