說說promise吧, promise 承諾。Promise的理解就是 我對你做出承諾,我怎么怎么,然后我有可能成功,我做到了, 有可能失敗, 我沒做到, 就是這么個東西.(說的玄一點, 這是一個異步流程控制的一個東東, 至于什么是異步流程控制?我不知道)
new Promise((resolve, reject)=>{})
Promise的狀態(tài)變化有兩種, 從pending —> fulfilled或者 pending—>rejected
pending 是初始的狀態(tài), fulfilled 是成功的狀態(tài), 剩下的就是失敗的狀態(tài)rejected
Promise會立即執(zhí)行, 但是狀態(tài)的改變需要我們來操作。
let abcc = new Promise((resolve, reject)=> { console.log("立即執(zhí)行了") setTimeout(()=>{ resolve("ccc") },1000) setInterval(()=> { console.log(abcc) },200) console.log("立即執(zhí)行了2") })
then
當(dāng)Promise的狀態(tài)發(fā)生改變,使用then方法來觸發(fā)對應(yīng)的處理方法.
兩個參數(shù): then方法包含兩個參數(shù), 對應(yīng)當(dāng)Promise的狀態(tài)為fulfilled和rejected的回調(diào)函數(shù)
省略參數(shù): 將創(chuàng)建一個沒有其他處理程序的新的Promise,繼承Promise最終的狀態(tài), then被調(diào)用, 第幾個參數(shù)省略,Promise將采用那個狀態(tài)
由于then方法返回的是一個新的Promise對象, 所以不會影響到當(dāng)前的Promise對象,由于返回來的是Promise,所以then后面可以then, then, then….無窮無盡,這樣完美的避免了 回調(diào)地獄.
let o1 = new Promise((resolve,reject) => { resolve(1) }) o1.then((value)=>{ console.log("value"+ value) // 1 console.log(o1) // resolved 1 value +=1; return value; }).then((value)=>{ console.log(value) //2 console.log(o1) //resolved 1 })
catch
因為我們寫的是程序, 所以經(jīng)常要考慮程序出錯的緣故. 就把rejected的函數(shù)捕捉給暴露出來了就是所謂的catch, 當(dāng)狀態(tài)變?yōu)閞ejected的時候, catch被調(diào)用
其實catch就是下面的縮寫
Promise.prototype.then(undefined, onRejected)
看下下面這個
var p1 = new Promise(function(resolve, reject) { resolve("Success"); }); p1.then(function(value) { console.log(value); // "成功!" throw "oh, no!"; or return Promise.reject("oh no ") }).catch(function(e) { console.log(e); // "oh, no!" }).then(function(){ console.log("after a catch the chain is restored"); }, function () { console.log("Not fired due to the catch"); });
catch返回的Promise狀態(tài), 由于catch是then(undefined, onrejected)的縮寫, 第一個參數(shù)為空, 所以catch返回的Promise狀態(tài)為成功
Promise.reject(reson)
返回一個用reason拒絕的Promsie
let o = Promise.reject("sss"); o.catch((reason) => { console.log(reason) // sss }).then(()=> { console.log("resolve") // 返回這個 理由在上面自己找 }, ()=> { console.log("reject") })
Promise.resolve()
Promise.resolve(value); 正常解析 Promise.resolve(promise); 根據(jù)promise的狀態(tài)來往下傳遞 Promise.resolve(thenable); 根據(jù)then的狀態(tài)來往下傳遞 Promise.resolve("Success").then(function(value) { console.log(value); // "Success" }, function(value) { // 不會被調(diào)用 })
Promise.all()
當(dāng)所有參數(shù)中的promise都完成, 或者任意一個promise的狀態(tài)變成reject,返回promise
let o1 = new Promise((resolve,reject)=>{ resolve("1") }) let o2 = new Promise((resolve,reject)=>{ resolve("2") }) let o3 = new Promise((resolve,reject)=>{ setTimeout(()=> { resolve("3") }, 3000) }) Promise.all([o1, o2, o3]).then((value)=>{ console.log(value) }).catch((reason)=>{ console.log(reason) })
Promise.race()
和all相反, 只要有一個狀態(tài)改變, 就會返回
可以講上面的all換成race來玩玩.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84246.html
摘要:的幾個擴(kuò)展總結(jié)描述和相反,當(dāng)所有的被拒絕之后,方法執(zhí)行完成的決議,如果存在一個執(zhí)行完成的決議,方法則執(zhí)行拒絕里邊的所有實例反過來就好了執(zhí)行到此執(zhí)行到此描述忽略被拒絕的,只需要有一個完成的,方法就執(zhí)行完成操作,如果全部的都被拒絕,方法執(zhí)行拒絕 Promise的幾個擴(kuò)展API總結(jié) 1. Promise.none 描述: 和 Promise.all 相反,當(dāng)所有的promise被拒絕之后,n...
摘要:對于的來說基元函數(shù)包括組合函數(shù)的類型簽名返回情況完成如果傳入的可迭代對象為空,會同步地返回一個已完成狀態(tài)的。相反,如果是在指定的時間之后完成,剛返回結(jié)果就是一個拒絕狀態(tài)的從而觸發(fā)方法指定的回調(diào)函數(shù)。在行中,對每個小任務(wù)得到的結(jié)果進(jìn)行匯總。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 從ES6 開始,我們大都使用的是 P...
摘要:構(gòu)造函數(shù)的實現(xiàn)我們在使用的時候其實是使用關(guān)鍵字創(chuàng)建了一個的實例,其實是一個類,即構(gòu)造函數(shù),下面來實現(xiàn)構(gòu)造函數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018998456); 閱讀原文 概述 Promise 是 js 異步編程的一種解決方案,避免了 回調(diào)地獄 給編程帶來的麻煩,在 ES6 中成為了標(biāo)準(zhǔn),這篇文章重點不是敘...
摘要:使用是極好的,它是如此有用以至于我覺得應(yīng)該好好研究一下,甚至是實現(xiàn)一個簡易的版本。構(gòu)造函數(shù)檢查參數(shù)例如是不是函數(shù)啊初始化,創(chuàng)建對象執(zhí)行因此構(gòu)造函數(shù)里面?zhèn)魅氲氖橇⒓幢粓?zhí)行的。 使用Promise是極好的,它是如此有用以至于我覺得應(yīng)該好好研究一下Promise,甚至是實現(xiàn)一個簡易的版本。實現(xiàn)之前,我們先來看看Promise的用途: 使用Promise callback hell Promi...
摘要:使用對象的好處在于可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。對象異步操作拋出錯誤,狀態(tài)就會變?yōu)椋蜁{(diào)用方法指定的回調(diào)函數(shù)處理這個錯誤。 Promise 含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)最早提出和實現(xiàn),ES6 將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了用法,原生提供了 Promise 對象。 所謂 P...
摘要:以上代碼,可以完美通過所有用例。在的函數(shù)中,為何需要這個同樣是因為規(guī)范中明確表示因此我們需要這樣的來確保只會執(zhí)行一次。其他情況,直接返回以該值為成功狀態(tài)的對象。 Promise是前端面試中的高頻問題,我作為面試官的時候,問Promise的概率超過90%,據(jù)我所知,大多數(shù)公司,都會問一些關(guān)于Promise的問題。如果你能根據(jù)PromiseA+的規(guī)范,寫出符合規(guī)范的源碼,那么我想,對于面試...
閱讀 1446·2021-11-24 09:39
閱讀 3626·2021-09-29 09:47
閱讀 1571·2021-09-29 09:34
閱讀 3067·2021-09-10 10:51
閱讀 2536·2019-08-30 15:54
閱讀 3216·2019-08-30 15:54
閱讀 869·2019-08-30 11:07
閱讀 1004·2019-08-29 18:36