成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【js】async和await使用

luodongseu / 3311人閱讀

摘要:摘自模塊關(guān)于和使用個(gè)人理解在每一個(gè)函數(shù)前面的都加上,函數(shù)內(nèi)部,如果是異步操作,直接在其前面加上即可,等待一步函數(shù)執(zhí)行的結(jié)果。修飾的函數(shù)自動(dòng)變成一個(gè)正常情況下,命令后面是一個(gè)對(duì)象。并發(fā)執(zhí)行的方式選擇或者使用下面的寫法使用循環(huán)控制了使用的時(shí)間

摘自http://es6.ruanyifeng.com/#docs/async#co模塊

關(guān)于asyncawait使用

個(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

相關(guān)文章

  • 【譯文】Node.js v7 Nightly版本的async/await小實(shí)踐

    摘要:正文的實(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加...

    Little_XM 評(píng)論0 收藏0
  • Async/Await替代Promise的6個(gè)理由

    摘要:是基于實(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í)...

    tuomao 評(píng)論0 收藏0
  • JS基礎(chǔ)】從JavaScript中的for...of說(shuō)起(下) - asyncawait

    摘要:基礎(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,并且介紹了兩者在...

    hufeng 評(píng)論0 收藏0
  • JS中的async/await -- 異步隧道盡頭的亮光

    摘要:結(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...

    jaysun 評(píng)論0 收藏0
  • 如何在 JS 循環(huán)中正確使用 asyncawait

    摘要:蛤當(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博客,一年...

    liujs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<