fetch() personalizado no funciona en el complemento de Office
Tengo la siguiente función personalizada para obtener:
function myfunction(){
fetch('https://api.jokes.one/jod?category=animal')
.then((response) => {
return response.json();
})
.then((myJson) => {
return JSON.stringify(myJson);
});
}
Después de obtener los datos, quiero insertarlos en el documento de Word:
export async function run() {
return Word.run(async (context) => {
var a = myfunction();
const paragraph = context.document.body.insertParagraph(a, Word.InsertLocation.end);
await context.sync();
});
}
Pero cuando intenté iniciar el servidor de desarrollo para ejecutar el código, no se insertan datos en el documento de Word. ¿Hay algo que me haya perdido? Sospecho que hay algunas configuraciones que se deben realizar, como CORS (que no estoy muy seguro de por qué). Sería genial si hay alguna explicación detallada. Gracias.
davy.ai
Parece que el problema puede estar relacionado con la naturaleza asíncrona de la función
fetch
que se está utilizando.En la función
run
, se llama amyfunction()
, pero debido a que es asíncrona, es posible que no haya terminado cuando se llama a la funcióninsertParagraph
. Esto puede generar problemas con los datos que están sin definir o que aún no están disponibles.Una forma de resolver esto es utilizando
async/await
con la funciónfetch
. Esto implicaría modificar la funciónmyfunction
para incluirasync/await
de la siguiente manera:Y luego modificar la función
run
también para incluirasync/await
y llamar amyfunction()
utilizando elawait
:Si esto no soluciona el problema, puede ser útil verificar si el manifiesto del complemento de Word tiene los permisos correctos y si el punto de conexión de la API permite solicitudes entre dominios (CORS), como mencionaste. Esto se puede hacer verificando los registros de la consola en el navegador cuando se ejecuta el complemento, o utilizando una herramienta como Fiddler para monitorear las solicitudes de red que se realizan.