下一个中间件是异步的时候,当前中间件 next 后的代码会先执行
来源:10-6 express介绍的总结
qq_木杉木_03622742
2022-01-28
老师讲到获取 postData 的数据是异步操作
我在每个 next() 方法的后面都添加了代码执行,原来我理解的结果是,所有的方法都调用结束。才会反向调用每个 next() 后面的代码。
理想结果应该是:1 => 2 => 3 => 4 => 5 => 6
但真实结果却是:1 => 2 => 6 => 3 => 4 => 5
请问老师,异步的中间件如果想得到 理想结果,该怎么写?
示例代码如下:
function getPostData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({ username: "hzz", password: "123456" });
}, 2000);
});
}
// 请求开始整体拦截
app.use(function (req, res, next) {
console.log("1 服务接受请求开始了...");
next();
console.log("6 next 之后 -- 服务请求结束了...");
});
// postdata 异步解析获取
app.use(async function (req, res, next) {
console.log("2 post data 请求异步获取");
req.body = await getPostData();
console.log("\r\n3post data 请求结束");
next();
console.log("5 next 之后 -- post data");
});
// 接口入口
app.use("/api", function (req, res, next) {
console.log("4 /api 开头的接头请求进入");
next();
});
写回答
1回答
-
双越
2022-01-29
你把所有中间件函数都改成 async 函数,然后 next() 改完 await next() ,就可以了。
022022-01-30
相似问题