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

首頁 > 網站 > 幫助中心 > 正文

ES6的異步操作之promise用法和async函數的具體使用

2024-07-09 22:42:17
字體:
來源:轉載
供稿:網友

promise 基本用法

Promise 對象是一個構造函數,用來生成 Promise 實例。Promise 構造函數接受一個函數作為參數,該函數的兩個參數分別是 resolve 和 reject。

resolve 函數的作用是,在異步操作成功時調用(Promise 對象的狀態從 pending 變為 fulfilled),并將異步操作的結果,作為參數傳遞出去。

reject 函數的作用是,在異步操作失敗時調用(Promise對象的狀態從 pending 變為 rejected),并將異步操作報出的錯誤,作為參數傳遞出去。

const funPromise = function(options) { return new Promise(function(resolve, reject) {  if (/* 異步操作成功 */){   resolve(result);  } else {   reject(error);  } });}

resolve 函數的參數除了正常的值以外,還可能是另一個 Promise 實例,此時,初始 promise 的最終狀態根據傳入的新的 Promise 實例決定。

reject 方法的作用,相當于拋出錯誤。等同于 throw new Error('error')。

Promise.prototype.then()

Promise 實例具有 then 方法,它的作用是為 Promise 實例添加狀態改變時的回調函數,即 Promise 實例生成以后,用 then 方法分別指定 fulfilled 狀態和 rejected 狀態的回調函數。

funPromise().then(function(result) { // fulfilled}, function(error) { // rejected})

then 方法可以接受兩個回調函數作為參數。第一個回調函數是 Promise 對象的狀態變為 fulfilled 時調用,第二個回調函數是 Promise 對象的狀態變為 rejected 時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受 Promise 對象傳出的值作為參數。

then 方法返回的是一個新的 Promise 實例(注意,不是原來那個 Promise 實例)。因此可以采用鏈式寫法,即 then 方法后面再調用另一個 then 方法來處理上一個 then 方法中 return 的結果。

funPromise().then(function(result) { return result.data;}).then(function(data) { // fulfilled});

上面的代碼使用 then 方法,依次指定了兩個回調函數。第一個回調函數完成以后,會將返回結果作為參數,傳入第二個回調函數。并且,第一個 then 返回的結果也可以是另一個異步操作的 Promise 對象,這時后一個 then 函數,就會等待該 Promise 對象的狀態發生變化,才會被調用。

funPromise().then( (result) => { return funPromise(result); }).then( (data) => { /* fulfilled */ }, (error) => { /* rejected */ });

上面代碼中,第一個 then 方法指定的回調函數,返回的是另一個 Promise 對象。這時,第二個 then 方法指定的回調函數,就會等待這個新的 Promise 對象狀態發生變化。如果變為 fulfilled,就調用第一個回調函數,如果狀態變為 rejected,就調用第二個回調函數。

Promise.prototype.catch()

Promise 實例具有 catch 方法,它的作用是為 Promise 實例添加狀態改變為 rejected 狀態的回調函數,也就是 then 方法的第二個函數的替代寫法。

funPromise().then(function(result) { // fulfilled}).catch(function(error) { // 處理 funPromise 和之前 then 回調函數運行時發生的錯誤});

Promise 對象的錯誤具有“冒泡”性質,會一直向后傳遞,直到被捕獲為止。也就是說,無論前面有多少個 then 函數,其中的錯誤總是會被下一個 catch 語句捕獲。

funPromise().then(function(result) { return funPromise(result);}).then(function(data) { // fulfilled}).catch(function(error) { // 處理前面三個 Promise 產生的錯誤});
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 突泉县| 沁水县| 建平县| 烟台市| 五原县| 澄城县| 东至县| 德阳市| 封丘县| 玉门市| 大兴区| 乐清市| 建宁县| 启东市| 仪征市| 乐昌市| 延寿县| 保德县| 安仁县| 宣武区| 德格县| 二连浩特市| 潼关县| 呼图壁县| 东莞市| 汉寿县| 定襄县| 灵台县| 郎溪县| 鸡西市| 互助| 富平县| 延吉市| 云霄县| 咸阳市| 长葛市| 安康市| 闽侯县| 同江市| 贵南县| 新津县|