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

首頁 > 學院 > 開發設計 > 正文

Promise初見

2019-11-11 04:21:41
字體:
來源:轉載
供稿:網友

今天在網上查看PRomise資料,發現promise有三種狀態,pending,fullfilled,rejected.分別對應了初始化狀態,成功狀態及失敗狀態。為了理解寫測試代碼來實驗:

function a(isTrue) { return new Promise(function (resolve, reject) { if (isTrue) { console.log('--------fun reslove'); resolve('Hello '); } else { console.log('-------fun reject'); reject('Hi '); } });}a(true).then(function (res) { console.log('---------result reslove'); console.log(res);}, function (rej) { console.log('---------result reject'); console.log(rej);});

得到結果:

--------fun reslove---------result resloveHello

再次運行代碼,改為a(false)得到結果:

-------fun reject---------result rejectHi

得到結果說明正確和失敗的結果分別用resolve 和reject 來返回及接收,但隨后就產生了疑問。 在得到promise對象后,用.then來處理,他有2個參數,第一個為resolve,用于接收成功狀態的值,第二個為reject用來接收失敗狀態的值,同時有一個catch 的方法,解釋是相當于Onreject函數的一種簡單寫法及

then(fn).catch(fn)===then(fn).then(null,fn)。隨即修改代碼a(false).then(function (res) { console.log('---------result reslove'); console.log(res);}).catch(function(err){ console.log('---------result reject'); console.log(err);})

運行結果得到 ——-fun reject ———result reject Hi 得到結果完全符合預計,隨即完善代碼,如下:

function a(isTrue) { return new Promise(function (resolve, reject) { var client = require('redis').createClient(); var key = 'err'; var value = 'false'; client.sadd(key, value, function (err, reply) { if (err) { reject(err); } else { resolve(reply); } }); client.quit(); })}a().then(function (res) { console.log('---------result reslove'); console.log(res);}).catch(function(err){ console.log('---------result reject'); console.log(err);})

該試例在redis 沒有打開服務狀態下執行,得到結果如下: ————fun reject ———result reject { AbortError: Stream connection ended and command aborted. ……. ……. } 一樣得到了預期結果。思考是否每次調用都需要處理promise對象都需要寫reject接收,于是修改代碼如下:

function a(isTrue) { return new Promise(function (resolve, reject) { var client = require('redis').createClient(); var key = 'err'; var valus = 'false'; client.sadd(key, value, function (err, reply) { if (err) { console.log('------------fun reject'); reject(err); } else { console.log('------------fun resolve'); resolve(reply); } }); client.quit(); }).catch(function (err) { console.log('--------------fun err'); return err; })}a().then(function (res) { console.log('----------result resolve'); console.log(res);},function(err){ console.log('----------result reject'); console.log(err);})

運行得到如下結果: ————fun reject ————–fun err ———-result resolve { AbortError: Stream connection ended and command aborted. ……….. ……….. } 發現在發生錯誤時去調用了reject,執行reject后直接跳進了catch,利用return 返回時promise對象狀態為成功態。在處理Promise對象時,resolve直接獲取到了錯誤的值。此刻若使用promise.all將因為無法判斷錯誤狀態,全部返回。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 务川| 朝阳市| 恭城| 赤水市| 团风县| 大城县| 舞钢市| 天柱县| 贵州省| 星子县| 合作市| 舒兰市| 清水县| 巢湖市| 龙江县| 晋中市| 山西省| 彰武县| 华坪县| 乌海市| 集贤县| 喜德县| 类乌齐县| 万州区| 信阳市| 镇巴县| 浦东新区| 内黄县| 浠水县| 健康| 文化| 留坝县| 武鸣县| 太仆寺旗| 朝阳市| 景泰县| 电白县| 二连浩特市| 渭源县| 沂水县| 九龙坡区|