欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ES6 Promise對(duì)象的含義和基本用法分析

 更新時(shí)間:2019年06月14日 12:04:12   作者:學(xué)習(xí)筆記666  
這篇文章主要介紹了ES6 Promise對(duì)象的含義和基本用法,結(jié)合實(shí)例形式分析了Promise的含義、功能、基本用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了ES6 Promise對(duì)象的含義和基本用法。分享給大家供大家參考,具體如下:

1.Promise的含義

Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案(回調(diào)函數(shù)和事件)更合理更強(qiáng)大。

所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件 (通常是一個(gè)異步操作)的結(jié)果。從語(yǔ)法上說(shuō),Promise是一個(gè)對(duì)象,從它可以獲取異步操作的消息。

Promise對(duì)象有以下2個(gè)特點(diǎn):

1.對(duì)象的狀態(tài)不受外界影響。Promise對(duì)象代表一個(gè)異步操作,有三種狀態(tài):Pending(進(jìn)行中)、Resolved(已完成)Rejected(已失敗)。只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無(wú)法改變這個(gè)狀態(tài)。這也是Promise這個(gè)名字的由來(lái),它的英語(yǔ)意思就是“承諾”,表示其他手段無(wú)法改變。

2.一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。Promise對(duì)象的狀態(tài)改變,只有兩種可能:從Pending變?yōu)?span style="color: #0000ff">Resolved;從Pending變?yōu)?span style="color: #0000ff">Rejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會(huì)再變了,會(huì)一直保持這個(gè)結(jié)果。就算改變已經(jīng)發(fā)生了,你再對(duì)Promise對(duì)象田靜回調(diào)函數(shù),也會(huì)立即得到這個(gè)結(jié)果。這與事件(Event)完全不同,事件的特點(diǎn)是,如果你錯(cuò)過(guò)了它,再去監(jiān)聽(tīng),是得不到結(jié)果的。

有了Promise對(duì)象,就可以把異步操作以同步操作的流程表達(dá)出來(lái),避免了層層嵌套的回調(diào)函數(shù)。此外,Promise對(duì)象提供了統(tǒng)一的接口,使得控制異步操作更加容易。

2.基本用法

ES6規(guī)定,Promise對(duì)象是一個(gè)構(gòu)造函數(shù),用來(lái)生成Promise實(shí)例

var promise = new Promise(function(resolve,reject){
 // ... some code
 if(/* 異步操作成功 */){
  resolve(value);
 }else{
  reject(error);
 }
});

Promise構(gòu)造函數(shù)接受一個(gè)函數(shù)作為參數(shù),該函數(shù)的兩個(gè)參數(shù)分別是resolvereject。它們是兩個(gè)函數(shù),又JavaScript引擎提供,不是自己部署。

resolve函數(shù)的作用,將Promise對(duì)象的狀態(tài)從“未完成”變成“成功”(即從Pending變?yōu)?span style="color: #0000ff">Resolved),在異步操作成功時(shí)調(diào)用,并將異步操作的結(jié)果,作為參數(shù)傳遞出去;
reject函數(shù)的作用是,在異步操作失敗時(shí)調(diào)用,并將異步操作報(bào)出的錯(cuò)誤,作為參數(shù)傳遞出去。

Promise實(shí)例生成以后,可以用then方法分別制定Resolved狀態(tài)和Rejected狀態(tài)的回調(diào)函數(shù):

promise.then(function(value){
 // sucess
},function(error){
 // failure
});

then方法可以接受2個(gè)回調(diào)函數(shù)作為參數(shù),第二個(gè)函數(shù)是可選的,不一定要提供。這兩個(gè)函數(shù)都接受Promise對(duì)象傳出的值作為參數(shù)。

下面是一個(gè)Promise對(duì)象的簡(jiǎn)單例子:

function timeout(ms){
 return new Promise((resolve,reject)=>{
  setTimeout(resolve,ms,'done');
 });
}
timeout(100).then((value)=>{
 console.log(value);
});

上面代碼中,timeout方法返回一個(gè)Promise實(shí)例,表示一段事件以后才會(huì)發(fā)生的結(jié)果。過(guò)了指定的時(shí)間(ms參數(shù))以后,Promise實(shí)例的狀態(tài)變?yōu)?code>Resolved,就會(huì)觸發(fā)then方法綁定的回調(diào)函數(shù)。

Promise新建后就會(huì)立即執(zhí)行

let promise = new Promise(function(resolve,rejeact){
 console.log('Promise');
 resolve();
});
promise.then(function(){
 console.log('Resolved');
});
console.log('Hi');
// Promise
// Hi
// Resolved

上面代碼中,Promise新建后立即執(zhí)行,所以首先輸出的是”P(pán)romise”,然后then方法指定的回調(diào)函數(shù),將在當(dāng)前腳本所有同步任務(wù)執(zhí)行完才會(huì)執(zhí)行,所以”Resolved”最后輸出。

下面是異步加載圖片的例子:

function loadImageAsync(url){
 return new Promise(function(resolve,reject){
  var image = new Image();
  image.onload = function(){
   resolve(image);
  };
  image.onerror = function(){
   reject(new Error('Could not load image at' + url));
  };
  image.src = url;
 });
}

下面是一個(gè)用Promise對(duì)象實(shí)現(xiàn)Ajax操作的例子:

var getJSON = function(url){
 var promise = new Promise(function(resolve,reject){
  var client = new XMLHttpRequest();
  client.open('GET',url);
  client.onreadystatechange = handler;
  client.responseType = 'json';
  client.setRequestHeader('Accept','application/json');
  client.send();
  function handler(){
   if(this.readyState !== 4){
    return;
   }
   if(this.status === 200){
    resolve(this.response);
   }else{
    reject(new Error(this.statusText));
   }
  }
 });
 return promise;
};
//
getJSON('/posts.jons').then(function(json){
 consoloe.log(json);
},function(error){
 console.log('出錯(cuò)了');
});

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS對(duì)象數(shù)組中如何匹配某個(gè)屬性值

    JS對(duì)象數(shù)組中如何匹配某個(gè)屬性值

    這篇文章主要介紹了JS對(duì)象數(shù)組中如何匹配某個(gè)屬性值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Javascript獲取與設(shè)置ckeditor數(shù)據(jù)的實(shí)現(xiàn)方法

    Javascript獲取與設(shè)置ckeditor數(shù)據(jù)的實(shí)現(xiàn)方法

    最近編輯器后臺(tái)升級(jí)成了ckeditor,但原來(lái)后臺(tái)有很多對(duì)應(yīng)編輯器內(nèi)容的替換功能,那么就需要用js獲取ckeditor編輯器里面的內(nèi)容,這里就為大家介紹一下具體的實(shí)現(xiàn)方法
    2023-08-08
  • 微信小程序 生成攜帶參數(shù)的二維碼

    微信小程序 生成攜帶參數(shù)的二維碼

    這篇文章主要介紹了微信小程序 生成攜帶參數(shù)的二維碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2019-10-10
  • JavaScript設(shè)計(jì)模式之責(zé)任鏈模式實(shí)例分析

    JavaScript設(shè)計(jì)模式之責(zé)任鏈模式實(shí)例分析

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之責(zé)任鏈模式,結(jié)合實(shí)例形式分析了責(zé)任鏈模式的概念、原理及具體定義與使用技巧,需要的朋友可以參考下
    2019-01-01
  • Bootstrap安裝環(huán)境配置教程分享

    Bootstrap安裝環(huán)境配置教程分享

    這篇文章主要為大家分享了Bootstrap安裝環(huán)境配置教程,安裝步驟非常簡(jiǎn)單,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 輕松理解JavaScript之AJAX

    輕松理解JavaScript之AJAX

    本文主要介紹了JavaScript中的AJAX的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • JS動(dòng)畫(huà)效果打開(kāi)、關(guān)閉層的實(shí)現(xiàn)方法

    JS動(dòng)畫(huà)效果打開(kāi)、關(guān)閉層的實(shí)現(xiàn)方法

    這篇文章主要介紹了JS動(dòng)畫(huà)效果打開(kāi)、關(guān)閉層的實(shí)現(xiàn)方法,可實(shí)現(xiàn)js控制層從中心位置打開(kāi)與關(guān)閉的功能,涉及javascript操作頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 用js制作淘寶放大鏡效果

    用js制作淘寶放大鏡效果

    這篇文章主要為大家詳細(xì)介紹了js制作淘寶放大鏡效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • TypeScript中泛型的使用詳細(xì)講解

    TypeScript中泛型的使用詳細(xì)講解

    泛型程序設(shè)計(jì)(generic programming)是程序設(shè)計(jì)語(yǔ)言的一種風(fēng)格或范式,下面這篇文章主要給大家介紹了關(guān)于TypeScript中泛型使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 基于JavaScript實(shí)現(xiàn)線(xiàn)性漸變的高斯模糊效果

    基于JavaScript實(shí)現(xiàn)線(xiàn)性漸變的高斯模糊效果

    這篇文章主要為大家詳細(xì)介紹了高斯模糊算法以及線(xiàn)性漸變的高斯模糊算法的原理,并通過(guò)一個(gè)小demo展示了如何實(shí)現(xiàn)y方向上線(xiàn)性漸變的高斯模糊效果,需要的可以了解下
    2024-01-01

最新評(píng)論