摘要:的基本用法如果執(zhí)行失敗,則調(diào)用如果執(zhí)行成功,則調(diào)用如果執(zhí)行成功,則繼續(xù)調(diào)用方法如果執(zhí)行失敗,則用捕獲失敗在的內(nèi)部,執(zhí)行順序是同步的。
Promise的基本用法
let promise = new Promise((resolve, reject) => { console.log(1) // 如果執(zhí)行失敗,則調(diào)用reject() // reject("fail") console.log(2) // 如果執(zhí)行成功,則調(diào)用resolve() resolve("success") }) // 如果執(zhí)行成功,則繼續(xù)調(diào)用then方法 promise.then(res => { // console.log(res) console.log(3) }) // 如果執(zhí)行失敗,則用catach捕獲失敗 promise.catch(err => { console.log(err) console.log(4) })
在Promise的內(nèi)部,執(zhí)行順序是同步的。其次等內(nèi)部執(zhí)行完成后,調(diào)用再選擇調(diào)用thenorcatch方法。
所以這次輸出的結(jié)果:
1then的執(zhí)行順序
2
3
let promise = new Promise((resolve, reject) => { console.log(1) // 如果執(zhí)行失敗,則調(diào)用reject() // reject("fail") console.log(2) // 如果執(zhí)行成功,則調(diào)用resolve() resolve("success") }) // 如果執(zhí)行成功,則繼續(xù)調(diào)用then方法 promise.then(res => { console.log(res) console.log(3) }) // promise內(nèi)部是同步的,但是then方法是異步的 console.log(5)
then方法執(zhí)行是異步的,不用等到then的方法結(jié)果,會(huì)直接執(zhí)行console.log(5)
1我們可以根據(jù)上面的代碼,豐富業(yè)務(wù)實(shí)際情況
2
5
3
let promise = new Promise((resolve, reject) => { console.log(`開始執(zhí)行`) // 如果執(zhí)行成功,則調(diào)用resolve() resolve("success") console.log(`執(zhí)行中ing`) }).then(res => { console.log(res) console.log("執(zhí)行成功,繼續(xù)執(zhí)行下一步") return "第二then方法,開始" }) // 如果執(zhí)行成功,則繼續(xù)調(diào)用then方法 promise.then(res => { console.log(res) }) // promise內(nèi)部是同步的,但是then方法是異步的 console.log(`我會(huì)在then方法前,先執(zhí)行`) // 我們可以利用timeout方法在then方法執(zhí)行完成后,進(jìn)行執(zhí)行 setTimeout(()=>console.log(`then方法執(zhí)行完成后,開始執(zhí)行`))執(zhí)行結(jié)果:
1.開始執(zhí)行總結(jié)
2.執(zhí)行中ing
3.我會(huì)在then方法前,先執(zhí)行
4.執(zhí)行成功,繼續(xù)執(zhí)行下一步
5.第二then方法,開始
6.then方法執(zhí)行完成后,開始執(zhí)行
其實(shí)比較好理解的方式是:每次當(dāng)promise執(zhí)行完成后,then是異步的,所以當(dāng)執(zhí)行then后,不會(huì)等它的結(jié)果,會(huì)直接執(zhí)行下面的代碼,但是setTimeout定時(shí)器本身會(huì)將執(zhí)行內(nèi)容調(diào)到任務(wù)隊(duì)列尾部,所以會(huì)等then方法執(zhí)行完成后才會(huì)調(diào)用定時(shí)器。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/106657.html
摘要:則是把類似的異步處理對(duì)象和處理規(guī)則進(jìn)行規(guī)范化,并按照采用統(tǒng)一的接口來(lái)編寫,而采取規(guī)定方法之外的寫法都會(huì)出錯(cuò)。這個(gè)對(duì)象有一個(gè)方法,指定回調(diào)函數(shù),用于在異步操作執(zhí)行完后執(zhí)行回調(diào)函數(shù)處理。到目前為止,已經(jīng)學(xué)習(xí)了創(chuàng)建對(duì)象和用,方法來(lái)注冊(cè)回調(diào)函數(shù)。 Promise 本文從js的異步處理出發(fā),引入Promise的概念,并且介紹Promise對(duì)象以及其API方法。 js里的異步處理 可以參考這篇文章...
摘要:它們其實(shí)是在運(yùn)行完成后,主動(dòng)向該回調(diào)函數(shù)中傳入的參數(shù)。該方法其實(shí)是的別名,用于指定狀態(tài)轉(zhuǎn)為失敗時(shí)的回調(diào)函數(shù)。構(gòu)造器回調(diào)函數(shù)參數(shù)中的和用于更改當(dāng)前的狀態(tài),并將其值返回給當(dāng)前的方法的參數(shù)。 ES6 Promise對(duì)象 ES6中,新增了Promise對(duì)象,它主要用于處理異步回調(diào)代碼,讓代碼不至于陷入回調(diào)嵌套的死路中。 @-v-@ 1. Promise本質(zhì) Promise本質(zhì)上是一個(gè) 函數(shù) ...
摘要:對(duì)象有個(gè)屬性,一個(gè)為,方法里面注入的回調(diào)函數(shù),用來(lái)對(duì)傳入的上一個(gè)傳遞過(guò)來(lái)的值進(jìn)行處理另一個(gè)為,構(gòu)造函數(shù)內(nèi)部定義的方法,用來(lái)改變狀態(tài)以及值。通過(guò)再次對(duì)構(gòu)造函數(shù)的加強(qiáng),完成了鏈?zhǔn)秸{(diào)用的功能。 最近看了一篇關(guān)于Promise內(nèi)部實(shí)現(xiàn)原理的文章Javascript in wicked detail。作者從簡(jiǎn)明的例子入手,一步一步的構(gòu)建健壯的Promise實(shí)現(xiàn)。我就拿作者文中的代碼實(shí)例梳理下文章...
摘要:簡(jiǎn)介是一個(gè)構(gòu)造函數(shù),既然是構(gòu)造函數(shù),那么,我們就可以得到一個(gè)的實(shí)例在上,有兩個(gè)函數(shù),分別叫做成功之后的回調(diào)函數(shù)和失敗之后的回調(diào)函數(shù)在構(gòu)造函數(shù)的屬性上,有一個(gè)方法,也就說(shuō),只要是構(gòu)造函數(shù)創(chuàng)建的實(shí)例,都可以訪問到方法表示一個(gè)異步操作每當(dāng)我們一個(gè) 簡(jiǎn)介 Promise 是一個(gè) 構(gòu)造函數(shù),既然是構(gòu)造函數(shù), 那么,我們就可以 new Promise() 得到一個(gè) Promise 的實(shí)例; 在...
摘要:構(gòu)造函數(shù)的實(shí)現(xiàn)我們?cè)谑褂玫臅r(shí)候其實(shí)是使用關(guān)鍵字創(chuàng)建了一個(gè)的實(shí)例,其實(shí)是一個(gè)類,即構(gòu)造函數(shù),下面來(lái)實(shí)現(xiàn)構(gòu)造函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018998456); 閱讀原文 概述 Promise 是 js 異步編程的一種解決方案,避免了 回調(diào)地獄 給編程帶來(lái)的麻煩,在 ES6 中成為了標(biāo)準(zhǔn),這篇文章重點(diǎn)不是敘...
閱讀 1163·2021-09-22 15:43
閱讀 2358·2021-09-22 15:32
閱讀 4530·2021-09-22 15:11
閱讀 2232·2019-08-30 15:55
閱讀 2599·2019-08-30 15:54
閱讀 996·2019-08-30 15:44
閱讀 1107·2019-08-29 13:26
閱讀 804·2019-08-29 12:54