摘要:學(xué)習(xí)地址詳見正文調(diào)用或并不會(huì)終結(jié)的參數(shù)函數(shù)的執(zhí)行調(diào)用以后,后面的還是會(huì)執(zhí)行,并且會(huì)首先打印出來。這是因?yàn)榱⒓吹氖窃诒据喪录h(huán)的末尾執(zhí)行,總是晚于本輪循環(huán)的同步任務(wù)。另外,方法指定的回調(diào)函數(shù),如果運(yùn)行中拋出錯(cuò)誤,也會(huì)被方法捕獲。
學(xué)習(xí)地址詳見:http://es6.ruanyifeng.com/#do...
正文1.調(diào)用resolve或reject并不會(huì)終結(jié) Promise 的參數(shù)函數(shù)的執(zhí)行
new Promise((resolve, reject) => { resolve(1); console.log(2); }).then(r => { console.log(r); }); // 2 // 1
調(diào)用resolve(1)以后,后面的console.log(2)還是會(huì)執(zhí)行,并且會(huì)首先打印出來。這是因?yàn)榱⒓?resolved 的 Promise 是在本輪事件循環(huán)的末尾執(zhí)行,總是晚于本輪循環(huán)的同步任務(wù)。
一般來說,調(diào)用resolve或reject以后,Promise 的使命就完成了,后繼操作應(yīng)該放到then方法里面,而不應(yīng)該直接寫在resolve或reject的后面。所以,最好在它們前面加上return語句,這樣就不會(huì)有意外。
2.關(guān)于catch
getJSON("/posts.json").then(function(posts) { // ... }).catch(function(error) { // 處理 getJSON 和 前一個(gè)回調(diào)函數(shù)運(yùn)行時(shí)發(fā)生的錯(cuò)誤 console.log("發(fā)生錯(cuò)誤!", error); });
上面代碼中,getJSON方法返回一個(gè) Promise 對(duì)象,如果該對(duì)象狀態(tài)變?yōu)閞esolved,則會(huì)調(diào)用then方法指定的回調(diào)函數(shù);如果異步操作拋出錯(cuò)誤,狀態(tài)就會(huì)變?yōu)閞ejected,就會(huì)調(diào)用catch方法指定的回調(diào)函數(shù),處理這個(gè)錯(cuò)誤。另外,then方法指定的回調(diào)函數(shù),如果運(yùn)行中拋出錯(cuò)誤,也會(huì)被catch方法捕獲。
1)狀態(tài)變成reject?的方式有兩個(gè):手動(dòng)操作 reject() reject方法的作用,等同于拋出錯(cuò)誤; 異步操作拋出錯(cuò)誤,狀態(tài)就會(huì)變?yōu)閞ejected
2)觸發(fā)catch: 異步操作狀態(tài)變?yōu)閞ejected; then方法運(yùn)行中拋出錯(cuò)誤
3)一般來說,不要在then方法里面定義Reject狀態(tài)的回調(diào)函數(shù)(即then的第二個(gè)參數(shù)),總是使用catch方法。
思考:第一步出錯(cuò),是直接執(zhí)行catch還是接著走then? 直接被catch
3.Promise 內(nèi)部的錯(cuò)誤不會(huì)影響到 Promise 外部的代碼
4.任務(wù)隊(duì)列
new Promise是同步的,會(huì)馬上執(zhí)行function參數(shù)中的事情。等function參數(shù)執(zhí)行完,new Promise才返回一個(gè)promise實(shí)例對(duì)象。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89047.html
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...
摘要:第一個(gè)回調(diào)函數(shù)完成以后,會(huì)將返回結(jié)果作為參數(shù),傳入第二個(gè)回調(diào)函數(shù)。捕獲錯(cuò)誤方法是的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)。處理前一個(gè)回調(diào)函數(shù)運(yùn)行時(shí)發(fā)生的錯(cuò)誤出錯(cuò)啦對(duì)象的錯(cuò)誤具有冒泡性質(zhì),會(huì)一直向后傳遞,直到被捕獲為止。 前言 一直想寫一篇關(guān)于promise的文來總結(jié)一下之前零零散散的promise知識(shí)點(diǎn),趁著工作閑暇,來做個(gè)總結(jié)。PS:本文適合有一定JavaScript基礎(chǔ)的童鞋閱讀。 什...
摘要:從現(xiàn)在開始,養(yǎng)成寫技術(shù)博客的習(xí)慣,或許可以在你的職業(yè)生涯發(fā)揮著不可忽略的作用。如果想了解更多優(yōu)秀的前端資料,建議收藏下前端英文網(wǎng)站匯總這個(gè)網(wǎng)站,收錄了國(guó)外一些優(yōu)質(zhì)的博客及其視頻資料。 前言 寫文章是一個(gè)短期收益少,長(zhǎng)期收益很大的一件事情,人們總是高估短期收益,低估長(zhǎng)期收益。往往是很多人堅(jiān)持不下來,特別是寫文章的初期,剛寫完文章沒有人閱讀會(huì)有一種挫敗感,影響了后期創(chuàng)作。 從某種意義上說,...
摘要:從現(xiàn)在開始,養(yǎng)成寫技術(shù)博客的習(xí)慣,或許可以在你的職業(yè)生涯發(fā)揮著不可忽略的作用。如果想了解更多優(yōu)秀的前端資料,建議收藏下前端英文網(wǎng)站匯總這個(gè)網(wǎng)站,收錄了國(guó)外一些優(yōu)質(zhì)的博客及其視頻資料。 前言 寫文章是一個(gè)短期收益少,長(zhǎng)期收益很大的一件事情,人們總是高估短期收益,低估長(zhǎng)期收益。往往是很多人堅(jiān)持不下來,特別是寫文章的初期,剛寫完文章沒有人閱讀會(huì)有一種挫敗感,影響了后期創(chuàng)作。 從某種意義上說,...
摘要:此時(shí),由于只有一個(gè)的狀態(tài)能夠確定,所以執(zhí)行的是唯一那個(gè)確定狀態(tài)的函數(shù),而不會(huì)執(zhí)行其他的,但是并不會(huì)阻止其他的執(zhí)行。在實(shí)際應(yīng)用中,常用來設(shè)置超時(shí)操作,比如接口請(qǐng)求超時(shí)等。思考這個(gè)其實(shí)并不是矛盾,接受的是返回的的狀態(tài),與原來的沒有關(guān)系。 原文地址 Promise.race // `delay`毫秒后執(zhí)行resolve function timerPromisefy(delay) { ...
閱讀 2638·2021-11-02 14:39
閱讀 4369·2021-10-11 10:58
閱讀 1505·2021-09-06 15:12
閱讀 1890·2021-09-01 10:49
閱讀 1365·2019-08-29 18:31
閱讀 1904·2019-08-29 16:10
閱讀 3377·2019-08-28 18:21
閱讀 906·2019-08-26 10:42