Estoy haciendo un trabajo con un colega, en el que elige ajax para hacer solicitudes a un servicio web, y yo uso fetch para hacer una solicitud a una api externa, me estoy encontrando con un problema y es que al momento de obtener los datos De la api a través de fetch me trae los datos después de cierto tiempo, pero cuando paso esos datos a través de ajax envía la variable vacía, lo cual es lógico porque la respuesta de fetch tarda un tiempo en llenar mi variable, así que qué Lo que intento es poner un setTimeout en el ajax para esperar un tiempo y que se ejecute después de que mi solicitud de búsqueda llene los datos, pero esto no funciona y no realiza ningún proceso:
Este es mi JavaScript:
$("body").on('click', '#MainContent_lnk_actualizar_foto', e => { e.preventDefault(); let Archivo = $('#MainContent_file_foto')[0].files[0]; let ubicacion = ''; let params = new URLSearchParams(location.search); let Id_Usuario = params.get('Id_Usuario'); const datos = new FormData(); datos.append('imagen', Archivo); datos.append('ubicacion', 'perfil'); fetch(`http://192.168.0.37:52456/api/Archivos/`, { method: 'POST', body: datos }).then(res => res.json()) .catch(error => console.error('Error:', error)) .then(response => { ubicacion = response.lugar }) setTimeout(() => { $.ajax({ type: 'POST', url: 'WebService_V_Perfil.asmx/SubirArchivos', data: '{"Archivo": "' + ubicacion + '","Id_Usuario": "' + Id_Usuario + '"}', contentType: 'application/json; charset=utf-8', dataType: 'json', success: result => { console.log(result); console.log(ubicacion); } }) }, 3000 });Además de los errores de sintaxis en su código, la única forma en que puede usar los valores que regresan de la llamada de fetch es colocando el código que procesa esos resultados en un bloque then pero dejando el bloque de catch para el final. De lo contrario, en este caso su código no se ejecutará como se esperaba, ya que el segundo bloque then() espera algo que el catch() anterior no devuelve.
fetch(`http://192.168.0.37:52456/api/Archivos/`, { method: 'POST', body: datos }) .then(res => res.json()) .then(response => { const ubicacion = response.lugar; $.ajax({ type: 'POST', url: 'WebService_V_Perfil.asmx/SubirArchivos', data: '{"Archivo": "' + ubicacion + '","Id_Usuario": "' + Id_Usuario + '"}', contentType: 'application/json; charset=utf-8', dataType: 'json', success: result => { console.log(result); console.log(ubicacion); } }) }) .catch(error => console.error('Error:', error)) Además, no creo que necesite usar ajax para hacer la misma tarea que hace fetch .