Estoy probando un disparador en MongoDB atlas que ejecuta una función Realm para agregar un objeto al índice de Algolia al insertarlo en la colección MongoDB. En mi caso, el registro se carga en el índice de Algolia con éxito, pero la función no se detiene allí y supera el límite de tiempo.
Los documentos mencionan que
El tiempo de ejecución de la función está limitado a 120 segundos
y esa es la razón por la que la función se agotó
Aquí está mi función Realm
exports = function(changeEvent) { const algoliasearch = require('algoliasearch'); const client = algoliasearch(context.values.get('algolia_app'),context.values.get('algolia_key')); const index = client.initIndex("movies"); changeEvent.fullDocument.objectID = changeEvent.fullDocument._id; delete changeEvent.fullDocument._id; index.saveObject(changeEvent.fullDocument) .then(({objectID}) => { console.log('successfully inserted: ',objectID); }) .catch(err => { console.log(err); }); };Aquí está el resultado que obtengo en los registros.
Logs: [ "successfully inserted: 61cf0a79c577393620dd8c80" ] Error: execution time limit exceeded Incluso probé con declaraciones de return después de console.log s pero sigo teniendo el mismo problema.
que estoy haciendo mal
Aparentemente, el equipo de MongoDB solucionó esto a principios de marzo, como se ve en https://www.mongodb.com/community/forums/t/extremely-slow-execution-of-an-external-dependency-function/16919/27 .
Probé con este código a continuación y funcionó perfectamente sin tiempos de espera esta vez. Hice que la función fuera una función asíncrona. Según los registros, ni siquiera tomó 1 segundo realizar la indexación.
exports = async function(changeEvent) { const algoliasearch = require('algoliasearch'); const client = algoliasearch(context.values.get('algolia_app'),context.values.get('algolia_key')); const index = client.initIndex("movies"); changeEvent.fullDocument.objectID = changeEvent.fullDocument._id; delete changeEvent.fullDocument._id; try{ const result = await index.saveObject(changeEvent.fullDocument); console.log(Date.now(),'successfully updated: ',result); } catch(e){ console.error(e); } }