提问人:Kevin Tommy 提问时间:8/1/2023 更新时间:8/1/2023 访问量:39
Koa.js 后端无法在回调函数中访问响应正文
Koa.js backend unable to access response body in callback function
问:
我有一个使用 koa.js 创建的后端,其中包含一个用于设置响应正文的回调函数。具体而言,后端的中间件功能如下所示
exports.middlewareFunction = async (ctx) => {
let data = 11;
someAsyncFunc(data, function (result) => {
ctx.body = result;
});
}
程序生成无法访问路由的错误。我对错误的猜测是,由于 someAsyncFunc 中的回调是异步执行的,这会导致在执行主流后设置 ctx.body。特别是,在回调中设置 ctx.body 之前,对中间件的调用已经返回。如果我的理解是正确的,有没有办法修复它,这样我仍然可以异步修改ctx.body,但同时允许在响应中返回它?
答:
0赞
jabronidude
8/1/2023
#1
我会把它放在评论中,但我的代表太低了。您提供的代码中存在一些问题,看起来您可能是 JavaScript 的新手,或者至少是异步函数,所以我只想提供 MDN 异步函数文档和 MDN Promise 文档来帮助您进一步理解。
要解决您提供的代码,请执行以下操作:
exports.middlewareFunction = async (ctx) => {
let data = 11;
someAsyncFunc(data, function (result) => {
ctx.body = result;
});
}
- 为什么是你的,但没有等待
在您的职能范围内?如果是,则应使用
等待。
middlewareFunction
async
someAsyncFunc
async
- 如果你是异步的,你应该考虑从中返回一个值并删除回调。通过使用 await 并将数据作为 promise 返回,您不必担心您遇到的问题,并且可以通过正确使用异步函数来安全地操作您的问题。
someAsyncFunc
someAsyncFunc
ctx.body
await
建议的示例修复:
exports.middlewareFunction = async (ctx) => {
let data = 11;
const result = await someAsyncFunc(data); // no need for callback
ctx.body = result;
// rest of code
}
下一个:如何返回异步调用的响应?
评论