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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Promise初見

2019-11-11 02:53:52
字體:
供稿:網(wǎng)友

今天在網(wǎng)上查看PRomise資料,發(fā)現(xiàn)promise有三種狀態(tài),pending,fullfilled,rejected.分別對(duì)應(yīng)了初始化狀態(tài),成功狀態(tài)及失敗狀態(tài)。為了理解寫測(cè)試代碼來實(shí)驗(yàn):

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);});

得到結(jié)果:

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

再次運(yùn)行代碼,改為a(false)得到結(jié)果:

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

得到結(jié)果說明正確和失敗的結(jié)果分別用resolve 和reject 來返回及接收,但隨后就產(chǎn)生了疑問。 在得到promise對(duì)象后,用.then來處理,他有2個(gè)參數(shù),第一個(gè)為resolve,用于接收成功狀態(tài)的值,第二個(gè)為reject用來接收失敗狀態(tài)的值,同時(shí)有一個(gè)catch 的方法,解釋是相當(dāng)于Onreject函數(shù)的一種簡(jiǎn)單寫法及

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);})

運(yùn)行結(jié)果得到 ——-fun reject ———result reject Hi 得到結(jié)果完全符合預(yù)計(jì),隨即完善代碼,如下:

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);})

該試?yán)趓edis 沒有打開服務(wù)狀態(tài)下執(zhí)行,得到結(jié)果如下: ————fun reject ———result reject { AbortError: Stream connection ended and command aborted. ……. ……. } 一樣得到了預(yù)期結(jié)果。思考是否每次調(diào)用都需要處理promise對(duì)象都需要寫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);})

運(yùn)行得到如下結(jié)果: ————fun reject ————–fun err ———-result resolve { AbortError: Stream connection ended and command aborted. ……….. ……….. } 發(fā)現(xiàn)在發(fā)生錯(cuò)誤時(shí)去調(diào)用了reject,執(zhí)行reject后直接跳進(jìn)了catch,利用return 返回時(shí)promise對(duì)象狀態(tài)為成功態(tài)。在處理Promise對(duì)象時(shí),resolve直接獲取到了錯(cuò)誤的值。此刻若使用promise.all將因?yàn)闊o法判斷錯(cuò)誤狀態(tài),全部返回。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通州市| 永寿县| 乌兰浩特市| 襄樊市| 汨罗市| 菏泽市| 汕尾市| 阳谷县| 安平县| 巴东县| 轮台县| 乌拉特后旗| 巩义市| 缙云县| 寿阳县| 阿尔山市| 石台县| 鄂温| 余庆县| 罗源县| 繁峙县| 安塞县| 邳州市| 乌恰县| 休宁县| 淳化县| 漾濞| 建德市| 平昌县| 肥乡县| 庄河市| 莱芜市| 蓝山县| 信阳市| 潜江市| 山西省| 海宁市| 五指山市| 佛教| 萍乡市| 安达市|