摘要:是什么可以理解為一個(gè)承諾,如果調(diào)用,返回一個(gè)承諾給,然后就可以在寫計(jì)劃的時(shí)候這么寫,當(dāng)返回結(jié)果的時(shí)候,就執(zhí)行方案,如果沒(méi)有返回要的結(jié)果,就執(zhí)行方案。這樣一來(lái),所有的潛在風(fēng)險(xiǎn)就都在的可控范圍之內(nèi)了。
promise是什么
Promise可以理解為一個(gè)承諾,如果A調(diào)用B,B返回一個(gè)承諾給A,然后A就可以在寫計(jì)劃的時(shí)候這么寫,當(dāng)B返回結(jié)果的時(shí)候,A就執(zhí)行方案1,如果B沒(méi)有返回A要的結(jié)果,A就執(zhí)行方案2。這樣一來(lái),所有的潛在風(fēng)險(xiǎn)就都在A的可控范圍之內(nèi)了。
promise是es6解決異步編程的一種方案
通常使用的promise的有以下方法:
1、promise的構(gòu)造函數(shù)
2、promise的構(gòu)造函數(shù)的原型上邊的方法 then catch
3、promise的靜態(tài)方法 Promise.all Promise.resolve
每一個(gè)promise對(duì)象都會(huì)有三個(gè)狀態(tài) pending resolve reject 狀態(tài)一旦改變就不會(huì)在變回來(lái)
新建一個(gè)promise 的時(shí)候 參數(shù)為為一個(gè)函數(shù) 函數(shù)為兩個(gè)參數(shù)(resolve,reject)
這兩個(gè)參數(shù)的具體內(nèi)容在promise實(shí)例上邊的then 和catch里邊定義著
const imgs=[ "22.jpg", "111.jpg", ] var promise=new Promise(function (resolve,reject) { const img=new Image(); img.src=imgs[0]; img.onload=function () { resolve(this) } img.onerror=function () { reject(new Error("加載失敗")) } }) promise.then(function (img) { console.log("加載完成") document.body.appendChild(img) }).catch(function (error) { //捕獲異常 console.log(error) })Promise的靜態(tài)方法 Promise.all方法
會(huì)將多個(gè)promise組實(shí)例對(duì)象生成一個(gè)新的 promise
當(dāng)所有的Promise組中的實(shí)例的狀態(tài)都變成resolved Promise.all的狀態(tài)才會(huì)變成resolved 此時(shí)返回一個(gè)數(shù)組 傳遞給then中的resolve函數(shù)
promise組中的實(shí)例只要有一個(gè)rejected Promise.all的狀態(tài)就會(huì)變成rejected 此時(shí)第一個(gè)被rejected的實(shí)例返回值 會(huì)傳遞給catch的函數(shù)
使用Promise的靜態(tài)方法all來(lái)實(shí)現(xiàn) 只有當(dāng)一組圖片都加載完之后才向頁(yè)面中插入 有一個(gè)沒(méi)有加載成功就會(huì) 報(bào)錯(cuò)
const imgs=[ "22.jpg", "111.jpg", ] function loadImg(url) { var promise=new Promise(function (resolve,reject) { const img=new Image(); img.src=url; img.onload=function () { resolve(this) } img.onerror=function () { reject(new Error("加載失敗")) } }) return promise; } Promise.all([loadImg(imgs[0]),loadImg(imgs[1])]).then(function (datas) { datas.forEach(function (t) { document.body.appendChild(t) }) }).catch(function (error) { console.log(error) })Promise的靜態(tài)方法 Promise.resolve方法
將一個(gè)對(duì)象轉(zhuǎn)化為promise對(duì)象
有以下幾種使用方法:
1、接受promise的實(shí)例對(duì)象
Promise.resolve(loadImg(imgs[0])).then(function (img) { document.body.appendChild(img) })
和下面的代碼實(shí)現(xiàn)的功能是相同的
loadImg(imgs[0]).then(function (img) { document.body.appendChild(img) })
2、接受then-able對(duì)象
Promise.resolve({ then(resolve,reject){ var img=new Image(); img.src=imgs[0]; img.onload=function () { resolve(this); } img.onerror=function () { reject(); } } }).then(function (img) { document.body.appendChild(img) })
3、Promise.resolve接受普通的數(shù)據(jù)類型
返回一個(gè)狀態(tài)為resolved的promise對(duì)象 而且接受
Promise.resolve("ssasa").then(function (mess) { console.log(mess) //ssasa })
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88636.html
摘要:主要邏輯本質(zhì)上還是回調(diào)函數(shù)那一套。通過(guò)的判斷完成異步和同步的區(qū)分。 主要邏輯: 本質(zhì)上還是回調(diào)函數(shù)那一套。通過(guò)_subscribers的判斷完成異步和同步的區(qū)分。通過(guò) resolve,reject -> publish -> invokeCallback -> resolve,reject的遞歸和下一條then的parent是上一條的child來(lái)完成then鏈的流轉(zhuǎn) 同步情況...
摘要:方法沒(méi)有設(shè)置返回值。解決思路是,當(dāng)遇到任務(wù)的返回值是一個(gè)或者,并且有自己的方法的時(shí)候,就將它當(dāng)做是一個(gè)對(duì)象處理,等這個(gè)對(duì)象中的方法處理到的時(shí)候,把作為參數(shù)輸出傳遞給后續(xù)的任務(wù)。 前段時(shí)間看到關(guān)于microTask的文章,《Tasks, microTasks, queues and schedules》,感覺(jué)有必要澄清一下。本篇里用setTimeout來(lái)實(shí)現(xiàn)的Promise,和瀏覽器原生...
摘要:如題,新增的真的簡(jiǎn)單易用,感覺(jué)現(xiàn)在這一個(gè)支持完全可行。雖然兼容性問(wèn)題還是存在,但是打上后就基本解決了。來(lái)自使用簡(jiǎn)單使用這里說(shuō)明一下,必須配合一起使用,這會(huì)得到更佳效果。 如題,es6 新增的fetch真的簡(jiǎn)單易用,感覺(jué)現(xiàn)在這一個(gè)支持完全可行。 showImg(https://segmentfault.com/img/bVGlRy?w=995&h=631); 雖然兼容性問(wèn)題還是存在,但是...
摘要:下一步準(zhǔn)備使用網(wǎng)易云代替音樂(lè)。已經(jīng)開(kāi)發(fā)新的網(wǎng)易云代替音樂(lè)了,需要的可以看看這篇文章為微信小程序開(kāi)發(fā)的網(wǎng)易云音樂(lè)庫(kù) 項(xiàng)目要做一個(gè)可以為日記添加音樂(lè)的小程序,所以要用到音樂(lè)api,參考了一些文章后我們封裝了一個(gè)qq音樂(lè)api庫(kù)(完成了動(dòng)態(tài)token獲取,音樂(lè)搜索,音樂(lè)專輯圖片,音樂(lè)名稱,歌手名稱,播放),有需要的可以到Github自提。 小程序qq音樂(lè)api庫(kù)Gihub地址https://...
摘要:最近做了一個(gè)翻書效果的項(xiàng)目來(lái)總結(jié)一下實(shí)現(xiàn)過(guò)程和遇到的一些問(wèn)題供自己以后快速解決問(wèn)題希望也能幫到同樣遇到此類問(wèn)題的同學(xué)如果有更好的方法希望你能分享給我地址插件問(wèn)題都是些自己覺(jué)的比較難解決的比較片面如有其他疑問(wèn)可以留言交流或者當(dāng)你從官網(wǎng)下載 最近做了一個(gè)翻書效果的項(xiàng)目, 來(lái)總結(jié)一下實(shí)現(xiàn)過(guò)程和遇到的一些問(wèn)題, 供自己以后快速解決問(wèn)題, 希望也能幫到同樣遇到此類問(wèn)題的同學(xué), 如果有更好的方法,...
閱讀 1920·2021-09-03 10:50
閱讀 1382·2019-08-30 15:55
閱讀 3429·2019-08-30 15:52
閱讀 1287·2019-08-30 15:44
閱讀 1019·2019-08-30 15:44
閱讀 3369·2019-08-30 14:23
閱讀 3608·2019-08-28 17:51
閱讀 2337·2019-08-26 13:52