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

首頁 > 編程 > JavaScript > 正文

es6學習筆記之Async函數的使用示例

2019-11-19 16:36:55
字體:
來源:轉載
供稿:網友

前言

異步操作是 JavaScript 編程的麻煩事,麻煩到一直有人提出各種各樣的方案,試圖解決這個問題。

從最早的回調函數,到 Promise 對象,再到 Generator 函數,每次都有所改進,但又讓人覺得不徹底。它們都有額外的復雜性,都需要理解抽象的底層運行機制。

異步I/O不就是讀取一個文件嗎,干嘛要搞得這么復雜?異步編程的最高境界,就是根本不用關心它是不是異步。

async 函數就是隧道盡頭的亮光,很多人認為它是異步操作的終極解決方案。下面就來看看關于async函數的兩個栗子:

栗子一:從豆瓣 API 獲取數據

var fetchDoubanApi = function() {  return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() {  if (xhr.readyState === 4) {  if (xhr.status >= 200 && xhr.status < 300) {   var response;   try {   response = JSON.parse(xhr.responseText);   } catch (e) {   reject(e);   }   if (response) {   resolve(response, xhr.status, xhr);   }  } else {   reject(xhr);  }  } }; xhr.open('GET', 'https://api.douban.com/v2/user/aisk', true); xhr.setRequestHeader("Content-Type", "text/plain"); xhr.send(data); });};(async function() { try { let result = await fetchDoubanApi(); console.log(result); } catch (e) { console.log(e); }})();

栗子二:根據電影文件名,自動下載對應的海報

import fs from 'fs';import path from 'path';import request from 'request';var movieDir = __dirname + '/movies', exts  = ['.mkv', '.avi', '.mp4', '.rm', '.rmvb', '.wmv'];// 讀取文件列表var readFiles = function () { return new Promise(function (resolve, reject) {  fs.readdir(movieDir, function (err, files) {   resolve(files.filter((v) => exts.includes(path.parse(v).ext)));  }); });};// 獲取海報var getPoster = function (movieName) { let url = `https://api.douban.com/v2/movie/search?q=${encodeURI(movieName)}`; return new Promise(function (resolve, reject) {  request({url: url, json: true}, function (error, response, body) {   if (error) return reject(error);   resolve(body.subjects[0].images.large);  }) });};// 保存海報var savePoster = function (movieName, url) { request.get(url).pipe(fs.createWriteStream(path.join(movieDir, movieName + '.jpg')));};(async () => { let files = await readFiles(); // await只能使用在原生語法 for (var file of files) {  let name = path.parse(file).name;  console.log(`正在獲取【${name}】的海報`);  savePoster(name, await getPoster(name)); } console.log('=== 獲取海報完成 ===');})();

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云安县| 黄梅县| 丹阳市| 楚雄市| 汉中市| 鹤山市| 平果县| 柞水县| 汨罗市| 明溪县| 衡水市| 铜川市| 濮阳市| 固阳县| 舞钢市| 晴隆县| 肃宁县| 霞浦县| 常宁市| 常德市| 延吉市| 罗平县| 东安县| 公主岭市| 天全县| 武冈市| 象山县| 内江市| 大城县| 连云港市| 柳江县| 隆德县| 伊金霍洛旗| 特克斯县| 东丰县| 滁州市| 仙游县| 甘孜县| 庆安县| 岑溪市| 临汾市|