国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

三分鐘學會用ES7中的Async/Await進行異步編程

2024-05-06 15:33:25
字體:
來源:轉載
供稿:網友

本文介紹了三分鐘學會用ES7中的Async/Await進行異步編程,分享給大家,具體如下:

Async/Await基本規則

    async 表示這是一個async函數,await只能用在這個函數里面。 await 表示在這里等待promise返回結果了,再繼續執行。 await 后面跟著的應該是一個promise對象(當然,其他返回值也沒關系,只是會立即執行,不過那樣就沒有意義了…)

一個Async/Await例子

Async/Await應該是目前最簡單的異步方案了,首先來看個例子。

這里我們要實現一個暫停功能,輸入N毫秒,則停頓N毫秒后才繼續往下執行。

var sleep = function (time) {  return new Promise(function (resolve, reject) {    setTimeout(function () {      resolve();    }, time);  })};var start = async function () {  // 在這里使用起來就像同步代碼那樣直觀  console.log('start');  await sleep(3000);  console.log('end');};start();

控制臺先輸出start,稍等3秒后,輸出了end。

獲得返回值

await等待的雖然是promise對象,但不必寫.then(..),直接可以得到返回值。

var sleep = function (time) {  return new Promise(function (resolve, reject) {    setTimeout(function () {      // 返回 ‘ok'      resolve('ok');    }, time);  })};var start = async function () {  let result = await sleep(3000);  console.log(result); // 收到 ‘ok'};

捕捉錯誤

既然.then(..)不用寫了,那么.catch(..)也不用寫,可以直接用標準的try catch語法捕捉錯誤。

var sleep = function (time) {  return new Promise(function (resolve, reject) {    setTimeout(function () {      // 模擬出錯了,返回 ‘error'      reject('error');    }, time);  })};var start = async function () {  try {    console.log('start');    await sleep(3000); // 這里得到了一個返回錯誤        // 所以以下代碼不會被執行了    console.log('end');  } catch (err) {    console.log(err); // 這里捕捉到錯誤 `error`  }};

循環多個await

await看起來就像是同步代碼,所以可以理所當然的寫在for循環里,不必擔心以往需要閉包才能解決的問題。

..省略以上代碼var start = async function () {  for (var i = 1; i <= 10; i++) {    console.log(`當前是第${i}次等待..`);    await sleep(1000);  }};

值得注意的是,await必須在async函數的上下文中的。

..省略以上代碼let 一到十 = [1,2,3,4,5,6,7,8,9,10];// 錯誤示范一到十.forEach(function (v) {  console.log(`當前是第${v}次等待..`);  await sleep(1000); // 錯誤!! await只能在async函數中運行});// 正確示范for(var v of 一到十) {  console.log(`當前是第${v}次等待..`);  await sleep(1000); // 正確, for循環的上下文還在async函數中}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东乌珠穆沁旗| 无锡市| 白沙| 新巴尔虎左旗| 湖南省| 望城县| 临江市| 乃东县| 巴林右旗| 通江县| 洱源县| 巴林右旗| 津南区| 金沙县| 雷山县| 淮南市| 阿瓦提县| 连平县| 竹山县| 荃湾区| 鹰潭市| 武威市| 五莲县| 屏东县| 漳平市| 大竹县| 印江| 邻水| 靖安县| 临湘市| 浦北县| 礼泉县| 云和县| 平谷区| 白玉县| 栾城县| 沾化县| 呼伦贝尔市| 田阳县| 田阳县| 开封县|