国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript中Promise的使用詳解

2024-05-06 15:10:45
字體:
來源:轉載
供稿:網友

Promise是ES6中的函數,規范了如何處理異步任務的回調函數,功能類似于jQuery的defferred。簡單說就是通過promise對象的不同狀態調用不同的回調函數。目前IE8及以下不支持,其他瀏覽器都支持。

promise對象的狀態,從Pending轉換為Resolved或Rejected之后,這個promise對象的狀態就不會再發生任何變化。

使用步驟:

var promise = new Promise(function(resolve, reject) { // 異步任務,通過調用resolve(value) 或 reject(error),以改變promise對象的狀態;改變狀態的方法只能在此調用。//promise狀態改變后,會調用對應的回調方法});promise.then(function(value){//resolve時的回調函數,參數由異步的函數傳進來}).catch(function(error){//發生異常時或明確reject()時的回調函數})

 具體使用:

function getURL(URL) {           //因為promise創建時即執行,所以用工廠函數封裝promise對象  return new Promise(function (resolve, reject) {    var req = new XMLHttpRequest();    req.open('GET', URL, true);    req.onload = function () {      if (req.status === 200) {        resolve(req.responseText);      } else {        reject(new Error(req.statusText));      }    };    req.onerror = function () {      reject(new Error(req.statusText));    };    req.send();  });}// 運行示例var URL = "http://httpbin.org/get";getURL(URL).then(function onFulfilled(value){  console.log(value);}).catch(function onRejected(error){  console.error(error);});

Promise的回調只有異步方式,即使是同步任務的回調也是異步執行 。

var promise = new Promise(function (resolve){  console.log("inner promise");         // 執行1:同步任務先執行  resolve(‘callBack');});promise.then(function(value){  console.log(value);              // 執行3:雖然注冊時狀態為resolved,但回調仍是異步的;});console.log("outer promise");          // 執行2:同步代碼先執行


 

promise的方法鏈

then方法注冊的回調會依次被調用,每個then方法之間通過return 返回值傳遞參數。但是回調中的異常會導致跳過之間then的回調,直接調用catch的回調,之后再繼續調用剩下的then的回調。在then(onFulfilled, onRejected)中,onFulfilled的異常不會被自己的onRejected捕獲,所以優先使用catch。

 promise .then(taskA) .then(taskB) .catch(onRejected) .then(finalTask);

 taskA拋異常,taskB被跳過,finalTask仍會被調用,因為catch返回的promise對象的狀態為resolved。

then方法內可以返回3種值

1. 返回另一個promise對象,下一個then方法根據其狀態選擇onFullfilled/onRejected回調函數執行,參數仍由新promise的resolv/reject方法傳遞;

2. 返回一個同步值,下一個then方法沿用當前promise對象的狀態,無需等異步任務結束會立即執行;實參為上一then的返回值;如果沒有return,則默認返回undefined;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 大同市| 普兰县| 正定县| 安宁市| 大关县| 吉木乃县| 浏阳市| 田阳县| 嘉鱼县| 五常市| 康保县| 辛集市| 错那县| 梁平县| 赣州市| 平果县| 会泽县| 郴州市| 若尔盖县| 龙游县| 隆回县| 民权县| 界首市| 佛坪县| 阜阳市| 昌邑市| 伊金霍洛旗| 鄂州市| 永州市| 台南县| 嘉兴市| 锡林浩特市| 台前县| 奇台县| 孟津县| 林甸县| 青海省| 南投市| 佛冈县| 浦北县| 辽源市|