摘要:對于和的理解今天碰到問題是這樣子的調(diào)試的時(shí)候發(fā)現(xiàn)走了也走了有在我印象里是走了就不該走后來發(fā)現(xiàn)是我理解錯(cuò)了代碼是這樣的這個(gè)的是里的異常,里如果有任何異常都會(huì)被捕獲仔細(xì)看了是這樣解釋的簡單來講調(diào)用等于調(diào)用由于返回的是一個(gè)對象,返回值解釋如下如果
對于Promise.then()和Promise.catch()的理解
今天碰到問題是這樣子的:
調(diào)試bug的時(shí)候發(fā)現(xiàn)axios走了then也走了有catch,在我印象里是走了then就不該走catch(后來發(fā)現(xiàn)是我理解錯(cuò)了)
代碼是這樣的
this.axios.post("/user/login", params) .then(res => { console.log("response", res) }) .catch(err => { // 這個(gè)catch catch的是then里的異常,then里如果有任何異常都會(huì)被catch捕獲 console.log("catch") console.error(err.message) })
仔細(xì)看了Promise.catch()MCDN是這樣解釋的
The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.prototype.then(undefined, onRejected) (in fact, calling obj.catch(onRejected) internally calls obj.then(undefined, onRejected)).
簡單來講調(diào)用Promise.catch()等于調(diào)用Promise.prototype.then(undefined, onRejected)
由于Promise.then()返回的是一個(gè)Promise對象,返回值解釋如下:
throws an error, the promise returned by then gets rejected with the thrown error as its value;
如果拋出異常返回一個(gè)執(zhí)行rejected的Promise對象即相當(dāng)于調(diào)用返回Promise的Promise.then(undefined, onRejected)
對于Promise.catch()的返回值是這樣解釋的:
The Promise returned by catch() is rejected if onRejected throws an error or returns a Promise which is itself rejected; otherwise, it is resolved.
如果Promise.catch()又拋出異常則相當(dāng)于又調(diào)用Promise.then(undefined, onRejected)
如果未拋出異常則相當(dāng)于調(diào)用Promise.then(onResolved,undefined)
// 示例代碼 const getRandom = () => +(Math.random()*1000).toFixed(0); const asyncTask = taskID => new Promise(resolve => { let timeout = getRandom(); console.log(`taskID=${taskID} start.`); setTimeout(function() { console.log(`taskID=${taskID} finished in time=${timeout}.`); resolve(taskID) }, timeout); }); Promise.all([asyncTask(1),asyncTask(2),asyncTask(3)]) .then(resultList => { console.log("results:",resultList); });
詳見這里
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93153.html
摘要:說白了,就是給聲明的添加一個(gè)包含空的對象,再由函數(shù)返回這個(gè)空。如此構(gòu)成一個(gè)層層包裹的鏈。四首先本質(zhì)是一個(gè)遞歸函數(shù),結(jié)束條件是,即終止到未掛載對象的子為止。可以看到這個(gè)函數(shù)的作用就是根據(jù)屬性逐個(gè)觸發(fā)鏈中的或函數(shù)。 背景 Promise是一種非常實(shí)用的異步編程方案,本文對于Promise源碼的分析可以增進(jìn)讀者對于Promise原理的理解,以后不再害怕異步編程,不用擔(dān)心callback he...
摘要:簡單的說,即將到來的標(biāo)準(zhǔn)指出是一個(gè),所以作為一個(gè),必須可以被子類化。保護(hù)還是子類化這是個(gè)問題我真的希望我能創(chuàng)建一個(gè)忠實(shí)的給及以下。 原文地址:http://blog.getify.com/promis... 如果你需要趕上我們關(guān)于Promise的進(jìn)度,可以看看這個(gè)系列前兩篇文章深入理解Promise五部曲--1.異步問題和深入理解Promise五部曲--2.控制權(quán)轉(zhuǎn)移問題。 Promi...
摘要:的異步完成整個(gè)異步環(huán)節(jié)的有事件循環(huán)觀察者請求對象以及線程池。執(zhí)行回調(diào)組裝好請求對象送入線程池等待執(zhí)行,實(shí)際上是完成了異步的第一部分,回調(diào)通知是第二部分。異步編程是首個(gè)將異步大規(guī)模帶到應(yīng)用層面的平臺(tái)。 showImg(https://segmentfault.com/img/remote/1460000011303472); 本文首發(fā)在個(gè)人博客:http://muyunyun.cn/po...
摘要:對于異步的解決方案是新增的內(nèi)置對象,通常使用構(gòu)造函數(shù)創(chuàng)建,實(shí)例,解決異步問題。構(gòu)造函數(shù)必須接收一個(gè)函數(shù)作為參數(shù),我將其稱為函數(shù),函數(shù)也可以接收兩個(gè)參數(shù),和,它們是兩個(gè)函數(shù),由運(yùn)行環(huán)境提供,無需自己部署。如何理解規(guī)范中的這三個(gè)狀態(tài)及其規(guī)則。 對于異步的解決方案 Promise Promise是ES6新增的內(nèi)置對象,通常使用Promise構(gòu)造函數(shù)創(chuàng)建,Promise實(shí)例,解決異步問題。 1...
摘要:那之前的例子來使用一下的話,你會(huì)發(fā)現(xiàn)瀏覽器報(bào)錯(cuò)了,如圖定義的變量不允許二次修改。如圖箭頭函數(shù)沒有它自己的值,箭頭函數(shù)內(nèi)的值繼承自外圍作用域。如圖這里兩邊的結(jié)構(gòu)沒有一致,如果是的話,是可以正常解構(gòu)的。 前言 國慶假期已過一半,來篇干貨壓壓驚。 ES6,并不是一個(gè)新鮮的東西,ES7、ES8已經(jīng)趕腳了。但是,東西不在于新,而在于總結(jié)。每個(gè)學(xué)前端的人,身邊也必定有本阮老師的《ES6標(biāo)準(zhǔn)入門》或...
閱讀 2829·2023-04-26 01:00
閱讀 757·2021-10-11 10:59
閱讀 2983·2019-08-30 11:18
閱讀 2680·2019-08-29 11:18
閱讀 1022·2019-08-28 18:28
閱讀 3018·2019-08-26 18:36
閱讀 2136·2019-08-23 18:16
閱讀 1070·2019-08-23 15:56