摘要:摘自模塊關(guān)于和使用個(gè)人理解在每一個(gè)函數(shù)前面的都加上,函數(shù)內(nèi)部,如果是異步操作,直接在其前面加上即可,等待一步函數(shù)執(zhí)行的結(jié)果。修飾的函數(shù)自動(dòng)變成一個(gè)正常情況下,命令后面是一個(gè)對(duì)象。并發(fā)執(zhí)行的方式選擇或者使用下面的寫法使用循環(huán)控制了使用的時(shí)間
關(guān)于async和await使用摘自http://es6.ruanyifeng.com/#docs/async#co模塊
個(gè)人理解:在每一個(gè)函數(shù)前面的都加上async,函數(shù)內(nèi)部,如果是異步操作,直接在其前面加上await即可,等待一步函數(shù)執(zhí)行的結(jié)果。await后面可以接任何變量,可以是常量或者promise。async修飾的函數(shù)自動(dòng)變成一個(gè)promise.正常情況下,await命令后面是一個(gè) Promise 對(duì)象。如果不是,會(huì)被轉(zhuǎn)成一個(gè)立即resolve的 Promise 對(duì)象。
//經(jīng)過(guò)async修飾之后,自動(dòng)變成promise對(duì)象 async function f() { return "hello world"; } f().then(v => console.log(v)) // "hello world" async function f() { return await 123; } f().then(v => console.log(v)) // 123
//錯(cuò)誤處理 async function f() { throw new Error("出錯(cuò)了"); } f().then( v => console.log(v), e => console.log(e) ) // Error: 出錯(cuò)了async中錯(cuò)誤處理
//使用catch捕捉錯(cuò)誤 async function f() { await Promise.reject("出錯(cuò)了"); } f() .then(v => console.log(v)) .catch(e => console.log(e)) // 出錯(cuò)了
async function main() { try { var val1 = await firstStep(); var val2 = await secondStep(val1); var val3 = await thirdStep(val1, val2); console.log("Final: ", val3); } catch (err) { console.error(err); } }
//使用async控制指定時(shí)間打印 function timeout(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } async function asyncPrint(value, ms) { await timeout(ms); console.log(value) } asyncPrint("hello world", 50);多種形式
const foo = async function(){} async function foo(){} const foo = async () => {};并發(fā)處理
let foo = await getFoo(); let bar = await getBar(); //====================== // 寫法一 let [foo, bar] = await Promise.all([getFoo(), getBar()]); // 寫法二 let fooPromise = getFoo(); let barPromise = getBar(); let foo = await fooPromise; let bar = await barPromise; //使用下面的方式是,使一步操作同時(shí)觸發(fā)。最上面的方式是同步執(zhí)行。 //并發(fā)執(zhí)行的方式選擇 async function dbFuc(db) { let docs = [{}, {}, {}]; let promises = docs.map((doc) => db.post(doc)); let results = await Promise.all(promises); console.log(results); } // 或者使用下面的寫法 //使用for循環(huán)控制了使用await的時(shí)間 async function dbFuc(db) { let docs = [{}, {}, {}]; let promises = docs.map((doc) => db.post(doc)); let results = []; for (let promise of promises) { results.push(await promise); } console.log(results); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81075.html
摘要:正文的實(shí)踐幾個(gè)月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時(shí)建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個(gè)結(jié)果返回。在此之前,還它只能通過(guò)轉(zhuǎn)譯器來(lái)實(shí)現(xiàn)。 來(lái)自新手向國(guó)外技術(shù)博客RisingStack的又一篇Node.js相關(guān)技術(shù)文章,原文請(qǐng)看此。 正文 Node.js v7的async/await實(shí)踐 幾個(gè)月前,JavaScript引擎V8加...
摘要:是基于實(shí)現(xiàn)的,它不能用于普通的回調(diào)函數(shù)。憂慮對(duì)于,也許你有一些合理的懷疑它使得異步代碼不再明顯我們已經(jīng)習(xí)慣了用回調(diào)函數(shù)或者來(lái)識(shí)別異步代碼,我們可能需要花數(shù)個(gè)星期去習(xí)慣新的標(biāo)志。 譯者按: Node.js的異步編程方式有效提高了應(yīng)用性能;然而回調(diào)地獄卻讓人望而生畏,Promise讓我們告別回調(diào)函數(shù),寫出更優(yōu)雅的異步代碼;在實(shí)踐過(guò)程中,卻發(fā)現(xiàn)Promise并不完美;技術(shù)進(jìn)步是無(wú)止境的,這時(shí)...
摘要:基礎(chǔ)從中的說(shuō)起上和在異步操作中使用和是一件比較費(fèi)勁的事情,而給我們提供了更為簡(jiǎn)便的和。表達(dá)式會(huì)暫停當(dāng)前的執(zhí)行,等待處理完成。若正常處理,其回調(diào)的函數(shù)參數(shù)作為表達(dá)式的值,繼續(xù)執(zhí)行。若處理異常,表達(dá)式會(huì)把的異常原因拋出。 寫在前面 本文首發(fā)于公眾號(hào):【符合預(yù)期的CoyPan】 在上一篇文章中,梳理了javascript中的兩個(gè)重要概念:iterator和generator,并且介紹了兩者在...
摘要:結(jié)果輸出可以看出函數(shù)返回的是一個(gè)對(duì)象,如果函數(shù)中一個(gè)直接量,函數(shù)會(huì)封裝成對(duì)象返回,而如果沒(méi)有返回值時(shí),函數(shù)會(huì)返回在沒(méi)有結(jié)合時(shí),函數(shù)會(huì)立即執(zhí)行,返回一個(gè)對(duì)象。 JS中的異步操作從最初的回調(diào)函數(shù)演進(jìn)到Promise,再到Generator,都是逐步的改進(jìn),而async函數(shù)的出現(xiàn)仿佛看到了異步方案的終點(diǎn),用同步的方式寫異步。showImg(https://segmentfault.com/i...
摘要:蛤當(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博客,一年...
閱讀 1166·2021-10-15 09:39
閱讀 3070·2021-09-10 10:50
閱讀 3463·2019-08-30 15:53
閱讀 1890·2019-08-30 15:52
閱讀 2577·2019-08-29 15:31
閱讀 1985·2019-08-26 13:43
閱讀 2606·2019-08-26 13:37
閱讀 1449·2019-08-23 18:31