摘要:那如何使用進(jìn)行異步回調(diào)如何捕獲錯(cuò)誤聲明函數(shù)使用則返回使用則返回錯(cuò)誤,并結(jié)束的繼續(xù)向下執(zhí)行,并會(huì)跳到執(zhí)行過了秒后接收到值返回值可以是數(shù)字,字串,對(duì)象或者是獲得上一個(gè)返回的值或返回的的返回值如用到,則會(huì)直接跳到此處
promise用法
對(duì)比傳統(tǒng)回調(diào)函數(shù)與Pormise的寫法
傳統(tǒng)回調(diào)函數(shù)// 聲明函數(shù) function run(callback) { let parmas = 0; if (callback) callback(parmas); }; function fnStep1(callback) { let parmas = 123; if (callback) callback(parmas); }; function fnStep2(callback) { let parmas = 456; if (callback) callback(parmas); }; function fnStep3(callback) { let parmas = 789; if (callback) callback(parmas); }; // fnStep4 ... // 傳統(tǒng)使用回調(diào)的寫法 run(function (parmas) { // parmas = 0 console.log(parmas); fnStep1(function (parmas1) { // parmas = 123 console.log(parmas1); fnStep2(function (parmas2) { // parmas = 456 console.log(parmas2); fnStep3(function (parmas3) { // ... // 一直嵌套 }); }); }); });Promise的寫法
let p = new Promise((resolve, reject) => { // ?異步操作,最終調(diào)用: // const parmas = 0; resolve(parmas); // fulfilled // ?或 // reject("failure reason"); // rejected }) p .then( (parmas) => { // parmas,resolve返回的值 console.log(parmas); // 你的代碼塊 code... return 123; //返回值給下一個(gè)then } ) .then( (parmas) => { // parmas,上一個(gè)then返回的值 console.log(parmas); // 你的代碼塊 code... return 456; //返回值給下一個(gè)then } ) .then( (parmas) => { // parmas,上一個(gè)then返回的值 console.log(parmas); // 你的代碼塊 code... return 789; //返回值給下一個(gè)then } )Promise異步回調(diào)
Promise要比傳統(tǒng)回調(diào)函數(shù)更簡(jiǎn)潔直觀,可讀性更強(qiáng)。
那如何使用Promise進(jìn)行異步回調(diào)? 如何捕獲錯(cuò)誤?
// 聲明函數(shù) function asyncFn(a) { return new Promise((resolve, reject) => { a += 1; setTimeout(function () { // 使用resolve則返回a resolve(a); // 使用reject則返回錯(cuò)誤,并結(jié)束then的繼續(xù)向下執(zhí)行,并會(huì)跳到catch // reject(new Error("fail")); }, 2000); }); } // 執(zhí)行 asyncFn(1).then( (a) => { // 過了2秒后接收到a值 => 2 console.log(a); const newVal = 5; // const newVal = {a: 5}; // const newVal = new Promise((resolve, reject) =>{}); // 返回值可以是數(shù)字,字串,對(duì)象或者是 Promise return newVal; } ).then( (newVal) => { // newVal 獲得上一個(gè)then返回的值 或 返回的Promise的返回值 } ).catch( (err)=>{ // 如用到reject,則會(huì)直接跳到此處 console.log(err) } );
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109314.html
摘要:想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳博客一年百來(lái)篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個(gè)極好的改進(jìn)??赡軙?huì)產(chǎn)生誤導(dǎo)一些文章將與進(jìn)行了比較,并聲稱它是下一代異步編程風(fēng)格,對(duì)此作者深表異議。結(jié)論引入的關(guān)鍵字無(wú)疑是對(duì)異步編程的改進(jìn)。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇...
摘要:一是如何鏈?zhǔn)秸{(diào)用,二是如何中止鏈?zhǔn)秸{(diào)用。到目前為止,我們就基本了解了的用法及特點(diǎn),并實(shí)現(xiàn)用重構(gòu)用回調(diào)函數(shù)寫的異步操作。 Abstract 本文主要講的是如何實(shí)現(xiàn) Promise 的鏈?zhǔn)秸{(diào)用。也就是 promise().then().then().catch() 的形式,然后討論如何在某一個(gè) then() 里面中止 Promise。 在程序中,只要返回了一個(gè) promise 對(duì)象,如果 ...
摘要:蛤當(dāng)你嘗試在循環(huán)中使用時(shí),事情就會(huì)變得復(fù)雜一些。這意味著循環(huán)中的應(yīng)該按順序執(zhí)行。在循環(huán)中使用首先,使用對(duì)數(shù)組進(jìn)行遍歷。在中使用如果在中使用始終返回?cái)?shù)組,這是因?yàn)楫惒胶瘮?shù)總是返回。在循環(huán)中使用當(dāng)你使用時(shí),希望篩選具有特定結(jié)果的數(shù)組。 async 與 await 的使用方式相對(duì)簡(jiǎn)單。 蛤當(dāng)你嘗試在循環(huán)中使用await時(shí),事情就會(huì)變得復(fù)雜一些。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年...
這是理解SOLID原則中,關(guān)于依賴倒置原則如何幫助我們編寫低耦合和可測(cè)試代碼的第一篇文章。 寫在前頭 當(dāng)我們?cè)谧x書,或者在和一些別的開發(fā)者聊天的時(shí)候,可能會(huì)談及或者聽到術(shù)語(yǔ)SOILD。在這些討論中,一些人會(huì)提及它的重要性,以及一個(gè)理想中的系統(tǒng),應(yīng)當(dāng)包含它所包含的5條原則的特性。 我們?cè)诿看蔚墓ぷ髦校憧赡軟]有那么多時(shí)間思考關(guān)于架構(gòu)這個(gè)比較大的概念,或者在有限的時(shí)間內(nèi)或督促下,你也沒有辦法實(shí)踐一些好...
摘要:在微任務(wù)期間排隊(duì)的任何其他微任務(wù)都會(huì)被添加到隊(duì)列的末尾并進(jìn)行處理。因此一個(gè)已的調(diào)用時(shí)將立即把一個(gè)微任務(wù)加入微任務(wù)隊(duì)列中。和回調(diào)被列為微任務(wù)。上述規(guī)則確保微任務(wù)不會(huì)中斷執(zhí)行中期的。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客,一年百來(lái)篇優(yōu)質(zhì)文章等著你! 思考下面 JavaScript 代碼: console.log(script start); ...
閱讀 1448·2023-04-25 19:51
閱讀 1936·2019-08-30 15:55
閱讀 1748·2019-08-30 15:44
閱讀 2707·2019-08-30 13:58
閱讀 2702·2019-08-29 16:37
閱讀 1082·2019-08-29 15:34
閱讀 4017·2019-08-29 11:05
閱讀 2633·2019-08-28 17:51