CORRIENTEMENTE
Tengo la siguiente función EN AWS que utiliza funciones asíncronas de Textract SDK:
async function textParse(config) { const AWS = require("aws-sdk"); let textract = new AWS.Textract(); let analysisResults; console.log("Before Try"); try { console.log("Start Document Analysis"); analysisResults = await textract .startDocumentAnalysis(config, function (err, data) { if (err) { console.log("There was an error during doc analysis..."); console.log(err, err.stack); } // an error occurred else { console.log("Doc analysis successful!"); console.log(data); return data; } // successful response }) .promise(); } catch (e) { throw "Doc Analysis Error!" + e; } let JobId = analysisResults["JobId"]; let textractResult = await textract .getDocumentAnalysis({ JobId: JobId }) .promise(); console.log("End!") return textractResult; }TEMA
El registro de la consola muestra que los resultados del analysisResults se calculan dos veces. Nota Doc analysis successful! apareciendo dos veces en los registros.
INFO Before Try INFO Start Document Analysis INFO Doc analysis successful! INFO { JobId: '3a1e00c9b5ca9123124hhfdfdsdd02f2053c38ec5249e822c9e95f' } INFO Doc analysis successful! INFO { JobId: '5ef298d3a9123124hhfdfdsddsdssdsdsdds689580642a6346' } INFO End!Pasé algunas horas tratando de depurar esto y sospecho que tiene algo que ver con la forma en que manejo las promesas.
¿Alguna idea sobre qué cambios debo hacer?
No conozco la biblioteca de extractos, pero esto es lo que el código OP parece estar tratando de decir en un estilo singular (promesa, no devolución de llamada).
async function textParse(config) { const AWS = require("aws-sdk"); let textract = new AWS.Textract(); console.log("Before Try"); try { console.log("Start Document Analysis"); let analysisResults = await textract .startDocumentAnalysis(config) .promise(); console.log("Doc analysis successful!", analysisResults); let textractResult = await textract .getDocumentAnalysis({ JobId: analysisResults["JobId"] }) .promise(); console.log("End!", textractResult); return textractResult; } catch (err) { console.log("There was an error during doc analysis..."); console.log(err, err.stack); } }Me preocupa responder de esta manera, porque no parece abordar el síntoma descrito (dos registros de éxito), pero incluso si hay otro problema en el código, creo que sigue siendo una reescritura válida, en cuanto a la forma.