gpt4 book ai didi

Javascript Promise 解决混淆

转载 作者:行者123 更新时间:2023-11-30 11:14:20 25 4
gpt4 key购买 nike

private runMiddlewares(route: Route | ExceptionRoute, request: HttpRequest, response: HttpResponse): Promise<any> {
return new Promise((resolve, reject) => {
try {
route.middlewares.forEach(async (middleware: IMiddleware) => {
console.log('begin run middleware');
await middleware.process(request, response);
console.log('resolve run middleware');
console.log(request.body);
});
console.log('resolve all runMiddlewares');
resolve();
} catch (e) {
reject(e);
}
});
}

我已经编写了这个函数 runMiddlewares,当所有 middleware.process() 都已解析时,理想情况下应该 resolve()。我正在使用 typescript await 功能,但它似乎不起作用。我希望这样的事情发生在 route.middlewares.forEach(

  • '开始运行中间件'
  • 然后等待解决
  • '解析运行中间件'

对于 forEach 循环中的所有中间件,这将继续进行,当列表全部完成时,然后才应该打印 'resolve all runMiddlewares',最后,private runMiddlewares( .. .) 应该解决。

但是,forEach 现在会立即得到解析,从而阻止所有中间件完成。

应该如何处理?我认为 await 会在 forEach 循环中处理它,然后才会调用 runMiddlewaresresolve到底。我在这里缺少什么?

最佳答案

您可以使用 map 从您的中间件中创建一组 promise 。这个 promise 数组可以交给 Promise.all,它会在数组的每个 promise 都被解析时解析。

await Promise.all(route.middlewares.map((middleware: IMiddleware) => {
console.log('begin run middleware');
const promise = middleware.process(request, response);
console.log('resolve run middleware');
console.log(request.body);
return promise
});

或者更紧凑:

runMiddlewares(...) {
return Promise.all(
route.middlewares.map((middleware: IMiddleware) => {
return middleware.process(request, response))
})
)
}

关于Javascript Promise 解决混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52252600/

25 4 0
文章推荐: javascript - 使用 js 和 php 的步行(tic-toc)时钟
文章推荐: javascript - 如何获取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com