koa2 使用 async 、await、promise解决异步的问题
2023-09-11 14:22:19 时间
koa代码编写上避免了多层的嵌套异步函数调用 async await来解决异步
- async await 需要依赖于promise
三主角: __函数前面 async, 内部才能await,要想await能有用,就用promise包裹他__
1._函数前面 async
app.use(async (ctx)=>{ if(ctx.url==='/') { let data=await asyncReadFile(); ctx.body=data; // 设置响应头 ctx.set('content-type','text/html;charset=utf-8'); //content-type: text/html;charset=utf-8 } else { ctx.body='ok'; } });
2.内部才能await
let data=await asyncReadFile();
3. 返回一个Promise 对象(包含两个参数)
function asyncReadFile() { return new Promise(function(resolve,reject) { fs.readFile('./index.html',(err,data)=>{ // 1:失败,err 2:成功需要data if(err) { reject(err); return; } // 成功 resolve(data); }); }); }
网整例子:
app.js
const fs = require('fs'); const koa = require('koa'); let app=new koa(); function asyncReadFile() { return new Promise(function(resolve,reject) { fs.readFile('./index.html',(err,data)=>{ // 1:失败,err 2:成功需要data if(err) { reject(err); return; } // 成功 resolve(data); }); }); } app.use(async (ctx)=>{ if(ctx.url==='/') { let data=await asyncReadFile(); ctx.body=data; // 设置响应头 ctx.set('content-type','text/html;charset=utf-8'); //content-type: text/html;charset=utf-8 } else { ctx.body='ok'; } }); app.listen(1000);
html
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <h1>hell world</h1> </body> </html>
效果:
相关文章
- python多线程与多进程异步事件框架
- Microsoft.Bcl.Async 使用总结--在.NET Framework 4.5项目上使用.NET Framework 4.5版本及以上版本才可以使用C# 5中的async/await异步特性
- jquery formValidate demo 采用struts 异步方式检验用户名是否存在
- Android多线程----异步消息处理机制之Handler详解
- spring boot:使用async异步线程池发送注册邮件(spring boot 2.3.1)
- 笨笨图片批量抓取下载 V0.2 beta[C# | WinForm | 正则表达式 | HttpWebRequest | Async异步编程]
- JavaScript 异步执行的学习笔记 - 什么是事件循环 Event loop?
- S4 extension field的异步创建和后台作业
- Atitit.异步编程的发展历史 1.1. TAP & async/await
- Paip.Php Java 异步编程。推模型与拉模型。响应式(Reactive)”编程FutureData总结... 1
- MVC—实现ajax+mvc异步获取数据
- js实现多个异步任务的串行和并行执行(add/sum)
- Java中异步注解@Async的陷阱
- 异步FIFO最小深度的计算
- 爬虫日记(95):Twisted开发异步程序基础
- 异步通信技术AJAX | AJAX实现搜索联想和自动补全