Estoy desarrollando una aplicación usando GraphQL en el backend y quiero implementar un método de comparación de rostros. Estoy usando el paquete facepp npm , que me da una API para realizar la comparación. El problema que tengo es que cuando se ejecuta mi resolución, finaliza antes de recibir una respuesta de facepp. ¿Cómo puedo hacer que devuelva la respuesta de facepp?
module.exports = { Mutation: { checkFace: async () => { console.log("Checking....."); let confidence; var parameters = { image_url1: "link to image 1", image_url2: "link to image 2", }; facepp.post("/compare", parameters, function (err, res) { if (!err) { confidence = res.confidence; //return res.confidence doesn't work } else { confidence = "There was an error" } }); return confidence }, },};
Después de un par de pruebas e investigaciones, se me ocurrió una solución funcional. El problema en mi código original era que no manejaba correctamente el controlador asíncrono del método facepp.post . En caso de que alguien se encuentre con el mismo problema, a continuación se muestra una implementación funcional de mi código.
module.exports = { Mutation: { checkFace: async () => { let confidence; const callCheck = () => { return new Promise((resolve, reject) => { var parameters = { image_url1: "link to image 1", image_url2: "link to image 2", }; facepp.post("/compare", parameters, function (err, res) { if (!err) { confidence = res.confidence; resolve(); } else { confidence = "error"; reject(); } }); }); }; await callCheck(); return confidence; }, }, };