Loading... # 前言 在使用koa2中处理路由时涉及到一些异步操作的困惑,有时候路由处理程序继续执行而不等待函数行为完成,这样会导致无法正常处理异步结果,因而路由会 **404 Not Found** 接下来会用一个例子记录一些对于异步的处理 # 正文 ```javascript const Koa = require('koa'); const app = new Koa(); // 模拟一个异步操作,比如读取文件 function simulateAsyncOperation() { return new Promise((resolve, reject) => { setTimeout(() => { // 模拟异步操作,返回一个字符串 resolve('Async operation result'); }, 1000); }); } // 不使用await处理异步操作 app.use(async (ctx) => { // 没有使用 await,不等待继续执行,会导致结果是一个 Promise 对象 // 读取文件的操作还未执行完毕,ctx.body 就已经被赋值了 const result = simulateAsyncOperation(); ctx.body = result; }); // 使用 await 来等待异步操作 app.use(async (ctx) => { const result = await simulateAsyncOperation(); ctx.body = result; // 现在 result 将是实际的字符串 }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 在本例中,对于一个需要等待处理的事件我们用计时器代替,在等待一秒钟后执行,在处理这个异步操作时如果不使用`async/await`会导致程序一直往后执行而忽略执行`simulateAsyncOperation()`。 # 参考资料 > [[理解 JavaScript 的 async/await - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/172378607)] 最后修改:2023 年 11 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏