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

ES6-10:Promise

這篇具有很好參考價值的文章主要介紹了ES6-10:Promise。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前端開發(fā)因為網(wǎng)絡交互的存在,產(chǎn)生了一種最常見的獨特場景——異步,即程序執(zhí)行的過程并非完全按照代碼的書寫順序執(zhí)行。異步編程的解決方法有①回調(diào)函數(shù)、②事件、③Promise、④觀察者對象;
Promise是ES6提供的一種異步編程的一種解決方案。簡單來書就是一個容器,里面存放著某個未來才會結束的事件;從語法角度來說是一個構造函數(shù)(對象),可以對各種異步操作進行同樣的處理方法。

1.Promise特點

  • 3種狀態(tài):Pending(進行中)、Fulfilled(已成功)、Rejected(已失敗);
  • 對象狀態(tài)不受外界影響:只有異步操作的結果可以決定當前是哪一種狀態(tài),任何其他操作都無法改變這個狀態(tài);
  • 2種不可逆狀態(tài)改變:只有兩種狀態(tài)改變①Pending->Fulffiled、②Pending->Rejected;只要兩種情況發(fā)生任何一種,狀態(tài)就凝固定型不再改變,即Resolved,任何時候都能且僅能得到這個結果;即使在添加新的對象也立即得到Resolved的結果;

2. 創(chuàng)建方法

  • 創(chuàng)建:let p=new Promise(function(resolved,reject){});
var promise=new Promise(function(resolve,rejecte){
//do somthing here
if(/*異步操作成功*/){resolve(value)
}else{reject(value)};
})

// 案例1 :Promise創(chuàng)建時立即執(zhí)行
let promise1=new Promise(function(resolve,reject){
    console.log("Promise is creating...");
    resolve();
});
promise1.then(function(){console.log("Promise is resolved !")});
console.log("Hi Script is Running...");


// Promise is creating...
// Hi Script is Running...
// Promise is resolved !

// 案例2:Promise返回值可帶參數(shù)
var p1=new Promise(function(resolve,reject){});
var p2=new Promise(function(resolve,reject){
    // do some other things...
    resolve(p1);
})

// 案例3 :Promise狀態(tài)定型的會回調(diào)函數(shù)在本輪事件循環(huán)結束時執(zhí)行
new Promise((resolve,reject)=>{
    console.log(1);
    resolve(2);
    console.log(3);
}).then(res=>{
    console.log(res);
})
// 1
// 3
// 2

// 案例4:顯示return語句后的代碼不執(zhí)行
new Promise(function(resolve,reject){
    console.log(1);
    return resolve(2);
    console.log(3);
}).then(res=>{
    console.log(res)
});
console.log(4)
// 1
// 4
// 2

Promise構造函數(shù)接受一個函數(shù)作為參數(shù),參數(shù)函數(shù)提供兩個參數(shù)方法,分別是resolve和reject,這兩個方法有JavaScript引擎提供,不用自己部署;Promise實例創(chuàng)建后會立即執(zhí)行,然后會執(zhí)行代碼中所有的同步操作, 最后會在Promise狀態(tài)定型后,執(zhí)行then方法指定的回調(diào)函數(shù) ;Promise的回調(diào)函數(shù)resolve和reject都可帶有參數(shù);Promise的回調(diào)函數(shù)在狀態(tài)定性后的下一輪事件中執(zhí)行,即無論狀態(tài)在何處定型(resolve()),都不影響Promise中其他代碼的執(zhí)行,但顯示return語句會影響;

3. 基本方法

  • Promise.prototype.then(resolveFn,rejectFn?):為Promise實例添加狀態(tài)改變是的回調(diào)函數(shù),返回至為Promise對象;該方法可鏈式重復調(diào)用,將前一個處理結果作為下一個函數(shù)的入?yún)?,? promise.then().then()
  • Promise.prototype.catch():指定Promise發(fā)生錯誤時的回調(diào)函數(shù),返回值為Promise對象,即Promise.then(null,rejection)的別名;Promise的錯誤對象具有“冒泡”性質,會一直向后傳遞,直到被catch或reject捕獲;但如果Promise沒有使用catch指定錯誤的處理方法,Promise的錯誤方法將永遠不會傳遞到外層代碼,即不會有任何反應;
// 案例5:Promise 錯誤對象冒泡--then過程中的錯誤會一直傳遞給最后至被捕獲
let p1=new Promise((resolve,reject)=>{resolve(httpFn)});
let p2=new Promise((resolve,reject)=>{p1});
let p3=new Promise((resolve,reject)=>{});
p3.then(p2).then(otherFn).catch(err=>{errorFn});

// 案例6:Promise的狀態(tài)一旦定性將無法被改變,即一個Promise實例有且僅有一次改變狀態(tài)的機會
let p4=new Promise((resolve,reject)=>{
    resolve('ok');
    throw new Error('test');
});
p4.then(res=>{console.log(res)}).catch(err=>{console.log(err)});
// ok

// 案例7
let soneFn=function(){
    return new Promise(function(resolve,reject){
        resolve(x+2);//此處應該報錯,因為x未聲名 
    })
}
someFn.then(function(){console.log('Everythings is ok.')});
// Everything is ok.
/////因未使用catch捕獲Promise異常,報錯不會被捕獲,也不會傳遞到外層代碼;相反代碼正常運行,但會打印錯誤ReferenceError: x is not defined.

  • Promise.all(arrLike):將一個具有Iterator接口的數(shù)據(jù)對象包裝成一個新的Promise實例,返回值;

①參數(shù)arrLike可以是Promise數(shù)組、或具有遍歷器的數(shù)據(jù);如果參數(shù)不是Promise數(shù)組,則調(diào)用Promise.resolve()方法將參數(shù)轉為Promise實例,在進一步處理;

②返回Promise實例的狀態(tài):被封裝的Promise實例都為Fullfiled狀態(tài)時,封裝返回Promise狀態(tài)才會變成Fullfied;否則只要有一個為rejected,則會將第一個rejected的實例返回給封裝后的Promise,同時,封裝后的Promise都會變成rejected;文章來源地址http://www.zghlxwxcb.cn/news/detail-711187.html

let pro1=new Promise.all([p1,p2,p3]);
let pro2=new Promise.all([1,2,3]); 
  • Promise.race(arrLike):將多個具有Iterator接口的數(shù)據(jù)包裝成一個Promise實例;與Promise.all()方法類似;不同之處在于,只要被包裝的Promise實例只要有一個率先改變狀態(tài),變回將狀態(tài)結果傳遞給封裝后的Promise對象;
  • Promise.resolve(argu):將一個數(shù)據(jù)轉換成Promise對象;根據(jù)傳入?yún)?shù)類型的不同處理方法不同,如下:
    ① 參數(shù)不存在:直接返回一個狀態(tài)為Resolved的Promise對象;
    ② Promise對象:返回Promise對象,不做任何處理;
    thenable對象:即一個具有then方法的對象;將這個對象轉換成Promise對象并立即執(zhí)行htneable的then方法;
    ④ 不具有thenable方法或非對象:返回一個新的Promise對象,狀態(tài)為resolved,結果為參數(shù)本身;
  • Promise.reject(argu):返回一個Promise對象,其狀態(tài)為Rejected;錯誤結果為整個參數(shù)本身;

5. 與steam事件、Observerble(觀察者模式的區(qū)別)

  • Promise、Observe都是將異步操作轉換成同步操作的實現(xiàn)方式;
  • Promise、Observe都可以進行聚合操作;
  • Promise的狀態(tài)是不可逆 的,其狀態(tài)僅有一次改變的機會,一旦改變,狀態(tài)便定型;結果值需要手動調(diào)用才可傳遞給后續(xù)操作
  • Observe的狀態(tài)是可以多次重復可變的,其狀態(tài)會根據(jù)入?yún)⒏淖儾鬟f給觀察者;結果值會主動通知到所有訂閱者(后續(xù)操作);

到了這里,關于ES6-10:Promise的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【ES6知識】Promise 對象

    【ES6知識】Promise 對象

    1.1 概述 Promise 對象用于表示一個異步操作的最終完成(或失?。┘捌浣Y果值。是異步編程的一種解決方案(可以解決回調(diào)地獄問題)。 一個 Promise 對象代表一個在這個 promise 被創(chuàng)建出來時不一定已知值的代理。它讓你能夠把異步操作最終的成功返回值或者失敗原因和相應的

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

    【ES6】Promise.all用法

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

    2024年02月09日
    瀏覽(18)
  • 第二章前端開發(fā)ES6基礎

    目錄 擴展運算符 概述 語法 應用 模板字符串 概述 應用 內(nèi)置對象擴展 概述 數(shù)組擴展方法 字符串擴展方法 set數(shù)據(jù)結構 概述 基本使用 操作方法 遍歷方法 認識symbol 概述 作用 基本使用 項目 擴展運算符 概述 擴展運算符(spread operator)是 ES6 中新增的一種運算符,用 三個點(

    2024年02月07日
    瀏覽(24)
  • 第一章前端開發(fā)ES6基礎

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

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

    【ES6】Promise.allSettled的用法

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

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

    【ES6】Promise.race的用法

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

    2024年02月10日
    瀏覽(20)
  • 【ES6】fetch函數(shù)和Promise

    fetch函數(shù)是現(xiàn)代JavaScript中用于發(fā)起HTTP請求的一個非常強大的工具。它返回一個Promise,這個Promise在請求成功時解析為Response對象,或者在請求失敗時拒絕。 以下是一個基本的fetch使用示例: 在這個例子中,我們首先向https://api.example.com/data發(fā)起一個GET請求。然后,我們檢查響應

    2024年02月09日
    瀏覽(22)
  • ES6基礎知識六:你是怎么理解ES6中 Promise的?使用場景?

    ES6基礎知識六:你是怎么理解ES6中 Promise的?使用場景?

    一、介紹 Promise,譯為承諾,是異步編程的一種解決方案,比傳統(tǒng)的解決方案(回調(diào)函數(shù))更加合理和更加強大 在以往我們?nèi)绻幚矶鄬赢惒讲僮?,我們往往會像下面那樣編寫我們的代碼 閱讀上面代碼,是不是很難受,上述形成了經(jīng)典的回調(diào)地獄 現(xiàn)在通過Promise的改寫上面的

    2024年02月15日
    瀏覽(22)
  • ES6 Promise/Async/Await使用

    Promise應用 在工作中, 我們經(jīng)常會遇到用異步請求數(shù)據(jù), 查詢一個結果, 然后把返回的參數(shù)放入到下一個執(zhí)行的異步函數(shù)像這樣: 當我們使用Promise后, 我們的程序就變成了這樣: 控制臺輸出如下: async/await應用 看是不是簡潔很多了, 如果你不想使用這種鏈式調(diào)用, 也可以結合async/

    2024年02月12日
    瀏覽(21)
  • 你是怎么理解ES6中 Promise的?使用場景?

    你是怎么理解ES6中 Promise的?使用場景?

    Promise ,譯為承諾,是異步編程的一種解決方案,比傳統(tǒng)的解決方案(回調(diào)函數(shù))更加合理和更加強大 在以往我們?nèi)绻幚矶鄬赢惒讲僮?,我們往往會像下面那樣編寫我們的代碼 閱讀上面代碼,是不是很難受,上述形成了經(jīng)典的回調(diào)地獄 現(xiàn)在通過 Promise 的改寫上面的代碼 瞬

    2024年03月15日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包