En la función de descripción general, llamamos await Tour.find () .cache (), por lo que primero se debe llamar a find y luego a cache, pero el primer caché se ejecuta primero y luego encuentra el método. ¿Es esto porque await está ejecutando la sincronización y la función asíncrona, primero ejecuta la sincronización y luego la sincronización (sí, sin escapar a la siguiente línea de código) o es otra cosa?
Aquí está la función del controlador (Overview.js) exportaciones.getOverview = catchAsync(async (req, res, next) => {
¿Puedes explicar por qué esto no se está ejecutando de la forma en que pienso? const tours = esperar Tour.find().cache(); res.status(200).render("descripción general", { título: "Todos los recorridos", recorridos, }); });
Aquí está la función definida en exec.js const { exec } = mongoose.Query.prototype;
mongoose.Query.prototype.cache = function () { this.useCache = true; return this; }; mongoose.Query.prototype.exec = async function () { if (!this.useCache) return exec.apply(this, arguments); const key = JSON.stringify( Object.assign({}, this.getQuery(), { collection: this.mongooseCollection.name, }) ); const cacheValue = await client.get(key); if (cacheValue) { const doc = JSON.parse(cacheValue); return Array.isArray(doc) ? doc.map((d) => this.model(d)) : this.model(doc); } // if we do, return that // Otherwise, issue the query and store the result in redis const result = await exec.apply(this, arguments); client.set(key, JSON.stringify(result), "Ex", 10); return result; };