node 开发中常用的async/await 处理回调的几种形式
来源:互联网 发布:rem换算px 移动端js 编辑:程序博客网 时间:2024/05/30 04:59
一、单一的回调处理
//下面两种形式的async函数效果相同,await只能用在async函数内部async function(){}async () => {}
(1)http请求
var http = require('http');(async () => { var res = await new Promise(function (resolve, reject) { var options = { hostname: 'XXX.com', path: "/api", method: 'GET' }; var req = http.request(options, function (res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); resolve(chunk); }); }); req.on('error', function (e) { console.log('problem with request: ' + e.message); reject(new Error('http failed')); }); req.end(); }); console.log('request body:' + res);})();
(2)数据库查询
这里用sequelize作为orm中间件,配置好数据库连接后在函数内:
(async () => { var Pets = await Pet.findAll({ offset: 0, limit: 5, where: { id: 1 } }); console.log(Pets[0].name); })();
(3)文件i/o
import fs from 'fs';import path from 'path';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))); }); });};(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('=== 获取海报完成 ===');})();
二、多个并发的回调处理
比如服务器端多个请求可以并发运行,但需要都返回结果后再运行下面的代码,此处也可以是数据库,或者其他耗时回调操作,这里拿数据库操作举例
(async () => { var petPromise = new Promise(function (resolve, reject) { Pet.findOne({ where: { id: 1 } }).then(function (p) { resolve(p); }).catch(function (err) { reject(new Error('failed: ' + err)); }); }); var perPromise = new Promise(function (resolve, reject) { Pet.findOne({ where: { id: 1 } }).then(function (p) { resolve(p); }).catch(function (err) { reject(new Error('failed: ' + err)); }); }); var argList = await Promise.all([petPromise, perPromise]); console.log(argList[1].name + 'love' + argList[0].name)})();})();
0 0
- node 开发中常用的async/await 处理回调的几种形式
- async 和 await 的异步处理
- async await关键字后面的处理
- .NET中async与await的使用
- ES7的Async/Await
- ES7的Async/Await
- ES7的Async/Await
- 在node.js 中使用async await
- Callback Promise Generator Async-Await 和异常处理的演进
- Callback Promise Generator Async-Await 和异常处理的演进
- 关于Promise,Generator,async / await 对异步的处理
- WP8的async和await
- WP8的async和await
- await和async的使用方法
- async & await 的前世今生
- C#的async和await
- async & await 的前世今生
- async & await 的前世今生
- ios分类category里的方法调用了但不执行
- Eclipse 导入项目乱码问题解决记录
- 后缀表达式的计算
- Ionic2 使用高德地图
- Delphi中怎么调用vb的DLL
- node 开发中常用的async/await 处理回调的几种形式
- TCP建连过程详解/160805
- 移动端web开发之坑--ios下的fixed问题
- Scroller类详解
- 隐藏的padding
- MediaPlayer的使用 带有seekBar
- 冒泡,简单选择,插入排序
- struts-config.xml配置文件详解
- er图