国产探花免费观看_亚洲丰满少妇自慰呻吟_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函數中}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 水富县| 泰和县| 英德市| 郑州市| 南华县| 吴桥县| 阳原县| 仙居县| 泰顺县| 准格尔旗| 陕西省| 临夏市| 方正县| 响水县| 彰化市| 龙里县| 沈阳市| 小金县| 澄城县| 扶沟县| 彰化县| 长海县| 玉田县| 富锦市| 宝坻区| 池州市| 尉犁县| 南川市| 舒城县| 噶尔县| 资阳市| 台南县| 康平县| 白山市| 嵊州市| 砚山县| 英超| 内乡县| 藁城市| 芮城县| 读书|