摘要:是什么可以理解為一個(gè)承諾,如果調(diào)用,返回一個(gè)承諾給,然后就可以在寫計(jì)劃的時(shí)候這么寫,當(dāng)返回結(jié)果的時(shí)候,就執(zhí)行方案,如果沒有返回要的結(jié)果,就執(zhí)行方案。這樣一來,所有的潛在風(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沒有返回A要的結(jié)果,A就執(zhí)行方案2。這樣一來,所有的潛在風(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ì)在變回來
新建一個(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來實(shí)現(xiàn) 只有當(dāng)一組圖片都加載完之后才向頁面中插入 有一個(gè)沒有加載成功就會(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://systransis.cn/yun/88636.html
摘要:主要邏輯本質(zhì)上還是回調(diào)函數(shù)那一套。通過的判斷完成異步和同步的區(qū)分。 主要邏輯: 本質(zhì)上還是回調(diào)函數(shù)那一套。通過_subscribers的判斷完成異步和同步的區(qū)分。通過 resolve,reject -> publish -> invokeCallback -> resolve,reject的遞歸和下一條then的parent是上一條的child來完成then鏈的流轉(zhuǎn) 同步情況...
摘要:方法沒有設(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》,感覺有必要澄清一下。本篇里用setTimeout來實(shí)現(xiàn)的Promise,和瀏覽器原生...
摘要:如題,新增的真的簡(jiǎn)單易用,感覺現(xiàn)在這一個(gè)支持完全可行。雖然兼容性問題還是存在,但是打上后就基本解決了。來自使用簡(jiǎn)單使用這里說明一下,必須配合一起使用,這會(huì)得到更佳效果。 如題,es6 新增的fetch真的簡(jiǎn)單易用,感覺現(xiàn)在這一個(gè)支持完全可行。 showImg(https://segmentfault.com/img/bVGlRy?w=995&h=631); 雖然兼容性問題還是存在,但是...
摘要:下一步準(zhǔn)備使用網(wǎng)易云代替音樂。已經(jīng)開發(fā)新的網(wǎng)易云代替音樂了,需要的可以看看這篇文章為微信小程序開發(fā)的網(wǎng)易云音樂庫 項(xiàng)目要做一個(gè)可以為日記添加音樂的小程序,所以要用到音樂api,參考了一些文章后我們封裝了一個(gè)qq音樂api庫(完成了動(dòng)態(tài)token獲取,音樂搜索,音樂專輯圖片,音樂名稱,歌手名稱,播放),有需要的可以到Github自提。 小程序qq音樂api庫Gihub地址https://...
摘要:最近做了一個(gè)翻書效果的項(xiàng)目來總結(jié)一下實(shí)現(xiàn)過程和遇到的一些問題供自己以后快速解決問題希望也能幫到同樣遇到此類問題的同學(xué)如果有更好的方法希望你能分享給我地址插件問題都是些自己覺的比較難解決的比較片面如有其他疑問可以留言交流或者當(dāng)你從官網(wǎng)下載 最近做了一個(gè)翻書效果的項(xiàng)目, 來總結(jié)一下實(shí)現(xiàn)過程和遇到的一些問題, 供自己以后快速解決問題, 希望也能幫到同樣遇到此類問題的同學(xué), 如果有更好的方法,...
閱讀 1815·2021-09-03 10:50
閱讀 1341·2019-08-30 15:55
閱讀 3386·2019-08-30 15:52
閱讀 1245·2019-08-30 15:44
閱讀 959·2019-08-30 15:44
閱讀 3329·2019-08-30 14:23
閱讀 3565·2019-08-28 17:51
閱讀 2301·2019-08-26 13:52