es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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 a myfunction(), pero debido a que es asíncrona, es posible que no haya terminado cuando se llama a la función insertParagraph. 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ón fetch. Esto implicaría modificar la función myfunction para incluir async/await de la siguiente manera:

    async function myfunction(){
      const response = await fetch('https://api.jokes.one/jod?category=animal');
      const myJson = await response.json();
      return JSON.stringify(myJson);
    }
    

    Y luego modificar la función run también para incluir async/await y llamar a myfunction() utilizando el await:

    export async function run() {
      return Word.run(async (context) => {
    
        const a = await myfunction();
    
        const paragraph = context.document.body.insertParagraph(a, Word.InsertLocation.end);
    
        await context.sync();
      });
    }
    

    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.

Comments are closed.