摘要:摘自模塊關(guān)于和使用個人理解在每一個函數(shù)前面的都加上,函數(shù)內(nèi)部,如果是異步操作,直接在其前面加上即可,等待一步函數(shù)執(zhí)行的結(jié)果。修飾的函數(shù)自動變成一個正常情況下,命令后面是一個對象。并發(fā)執(zhí)行的方式選擇或者使用下面的寫法使用循環(huán)控制了使用的時間
關(guān)于async和await使用摘自http://es6.ruanyifeng.com/#docs/async#co模塊
個人理解:在每一個函數(shù)前面的都加上async,函數(shù)內(nèi)部,如果是異步操作,直接在其前面加上await即可,等待一步函數(shù)執(zhí)行的結(jié)果。await后面可以接任何變量,可以是常量或者promise。async修飾的函數(shù)自動變成一個promise.正常情況下,await命令后面是一個 Promise 對象。如果不是,會被轉(zhuǎn)成一個立即resolve的 Promise 對象。
//經(jīng)過async修飾之后,自動變成promise對象 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
//錯誤處理 async function f() { throw new Error("出錯了"); } f().then( v => console.log(v), e => console.log(e) ) // Error: 出錯了async中錯誤處理
//使用catch捕捉錯誤 async function f() { await Promise.reject("出錯了"); } f() .then(v => console.log(v)) .catch(e => console.log(e)) // 出錯了
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控制指定時間打印 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; //使用下面的方式是,使一步操作同時觸發(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的時間 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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81075.html
摘要:正文的實踐幾個月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個結(jié)果返回。在此之前,還它只能通過轉(zhuǎn)譯器來實現(xiàn)。 來自新手向國外技術(shù)博客RisingStack的又一篇Node.js相關(guān)技術(shù)文章,原文請看此。 正文 Node.js v7的async/await實踐 幾個月前,JavaScript引擎V8加...
摘要:是基于實現(xiàn)的,它不能用于普通的回調(diào)函數(shù)。憂慮對于,也許你有一些合理的懷疑它使得異步代碼不再明顯我們已經(jīng)習慣了用回調(diào)函數(shù)或者來識別異步代碼,我們可能需要花數(shù)個星期去習慣新的標志。 譯者按: Node.js的異步編程方式有效提高了應用性能;然而回調(diào)地獄卻讓人望而生畏,Promise讓我們告別回調(diào)函數(shù),寫出更優(yōu)雅的異步代碼;在實踐過程中,卻發(fā)現(xiàn)Promise并不完美;技術(shù)進步是無止境的,這時...
摘要:基礎(chǔ)從中的說起上和在異步操作中使用和是一件比較費勁的事情,而給我們提供了更為簡便的和。表達式會暫停當前的執(zhí)行,等待處理完成。若正常處理,其回調(diào)的函數(shù)參數(shù)作為表達式的值,繼續(xù)執(zhí)行。若處理異常,表達式會把的異常原因拋出。 寫在前面 本文首發(fā)于公眾號:【符合預期的CoyPan】 在上一篇文章中,梳理了javascript中的兩個重要概念:iterator和generator,并且介紹了兩者在...
摘要:結(jié)果輸出可以看出函數(shù)返回的是一個對象,如果函數(shù)中一個直接量,函數(shù)會封裝成對象返回,而如果沒有返回值時,函數(shù)會返回在沒有結(jié)合時,函數(shù)會立即執(zhí)行,返回一個對象。 JS中的異步操作從最初的回調(diào)函數(shù)演進到Promise,再到Generator,都是逐步的改進,而async函數(shù)的出現(xiàn)仿佛看到了異步方案的終點,用同步的方式寫異步。showImg(https://segmentfault.com/i...
摘要:蛤當你嘗試在循環(huán)中使用時,事情就會變得復雜一些。這意味著循環(huán)中的應該按順序執(zhí)行。在循環(huán)中使用首先,使用對數(shù)組進行遍歷。在中使用如果在中使用始終返回數(shù)組,這是因為異步函數(shù)總是返回。在循環(huán)中使用當你使用時,希望篩選具有特定結(jié)果的數(shù)組。 async 與 await 的使用方式相對簡單。 蛤當你嘗試在循環(huán)中使用await時,事情就會變得復雜一些。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年...
閱讀 1155·2021-10-15 09:39
閱讀 3053·2021-09-10 10:50
閱讀 3455·2019-08-30 15:53
閱讀 1878·2019-08-30 15:52
閱讀 2565·2019-08-29 15:31
閱讀 1978·2019-08-26 13:43
閱讀 2594·2019-08-26 13:37
閱讀 1445·2019-08-23 18:31