gpt4 book ai didi

javascript - app.use 的 async.parallel 与第二个参数

转载 作者:行者123 更新时间:2023-12-05 03:35:55 25 4
gpt4 key购买 nike

我使用 express v4.17.1并想让我的 app.use() 中间件并行运行。

所以我在网上找了一些例子。

示例:

function runInParallel() {
async.parallel([
getUserProfile,
getRecentActivity,
getSubscriptions,
getNotifications
], function(err, results) {
//This callback runs when all the functions complete
});
}

但是我的申请中有:

const app = express();
const APP_FOLDER = "bdt";

app.use(httpContext.middleware);
app.use(metricsMiddleware);
app.use(rtEndMiddleware);
app.use(trackingContextMiddleware);
app.use(healthRoutes());

app.use("/" + APP_FOLDER + "/api/products", productsRoutes);
app.use("/tcalc/" + APP_FOLDER + "/api/products", productsRoutes);

productRoutes 是这样的:

const jsonParser = bodyParser.json({
limit: "1mb",
});

const accessFilter = accessFilterMiddleware(Registry.list());
const localDevFilter = localDevFilterMiddleware(Registry.list());

const apiRoutes: Router = Router();


apiRoutes.get("/", listProducts);
apiRoutes.get("/healthz", cProductHealth);
apiRoutes.get("/:id", accessFilter, localDevFilter, fetchProductData);
apiRoutes.post(
"/:id",
accessFilter,
localDevFilter,
jsonParser,
fetchProductData,
);
apiRoutes.get(
"/:id/fields/:fieldId/options",
accessFilter,
localDevFilter,
fetchProductOptions,
);
apiRoutes.post(
"/:id/loadmoreoptions",
accessFilter,
localDevFilter,
jsonParser,
loadMoreOptions,
);
apiRoutes.post("/:id/ploy", accessFilter, jsonParser, fetchMultipleProductData);
apiRoutes.post(
"/:id/gxx",
accessFilter,
localDevFilter,
jsonParser,
fetchGssData,
);
apiRoutes.get("/:id/healthz", collectProductHealth);

我认为对于第一个应该很容易:

async.parallel([
httpContext.middleware,
metricsMiddleware,
rtEndMiddleware,
trackingContextMiddleware,
healthRoutes()
], function(err, results) {
//This callback runs when all the functions complete
});

但我的问题是:在这种情况下,我该如何使用第二个参数 (productRoutes) 来实现?

app.use("/" + APP_FOLDER + "/api/products", productsRoutes);
app.use("/tcalc/" + APP_FOLDER + "/api/products", productsRoutes);

最佳答案

您一直在走下坡路,您应该稍微改变一下您的方法,目前您已经完全把一个简单的问题复杂化了,而您正在寻找的解决方案在 javascript 中是不可能的。

如果你想在 express 中创建路由,那么不要对所有东西都使用 app.use,它应该只用于中间件或注册一个路由器,你可以在其上定义路由。

你应该使用:

app.get('/', () => ...

定义你的路线。或者,您也可以通过以下方式使用路由器:

app.use(router)

...

router.get('/', () => ...

不仅如此,如果您想在 javascript 中定义 async 或“并行”路由,那么只需像平常一样定义异步回调,删除您所做的大部分工作。

app.get('/', async () => ...

现在这是一个异步执行的路由。

您还应该注意不要乱用 express 的中间件,因为您会弄乱现有的中间件(例如错误路由)。

更重要的是,您所指的库只是一个功能简洁的辅助库,它不会从根本上改变 javascript 的工作方式。当你调用一个异步函数时,它将被添加到事件队列中,并且仍然一个接一个地同步执行,真正的多线程是不可能的,除非服务 worker 和浏览器 API 调用临时在它们自己的单个线程中执行, 在被添加到事件队列之前。

你正在寻找的只是一个简单的:router.get('/', async () => ...,这是你能做的最好的,而且看起来所有您的路线并行执行。

在您声明了其中的多个之后,您就可以使用类似 Promise.all 的方式调用所有这些。我最好的猜测是这也是 parallel 之类的东西正在做的事情。

关于javascript - app.use 的 async.parallel 与第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69749464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com