J'ai du mal avec ce code qui passe d'Ajax à récupérer. Je veux appeler une API et

  • ne pas revenir avant d'avoir terminé
  • renvoyer l'objet de réponse avec le statut
  • renvoie l'objet de réponse avec json
  • renvoie l'objet de réponse avec un message d'erreur s'il existe. Ce code est renvoyé avant la fin, provoquant une erreur non interceptée et forçant le navigateur à repeindre (Chrome). Je suis incapable de comprendre pourquoi. Si je parcours lentement le code, il se termine toujours.
    function getAPI(url, requestOptions) {
    return fetch(url, requestOptions).then((response) => {
        return response.json().then(json => {
            response.json = json;
            console.log(response);
            return response;
        })
        .catch(error => {
            console.error('Error:', error);
            response.error = error;
            return response;
        });
    }).catch(error => {
        console.error('Error:', error);         
        response.error = error;
        return response;
    });
}
0
user1607416 19 févr. 2021 à 23:23

1 réponse

Meilleure réponse

Je pense que tu voulais obtenir ce résultat

async function getAPI(url, requestOptions) {
    let result;

    await fetch(url, requestOptions)
        .then(response => response.json())
        .then(response => result = response)
        .catch(error => console.error('Error:', error))

    return result;
}

En utilisant:

await getAPI('https://jsonplaceholder.typicode.com/todos/1')

Et il renvoie la réponse.

// Modifié, avec ajout du statut

async function getAPI(url, requestOptions) {
    let result;

    await fetch(url, requestOptions)
        .then(response => response.json())
        .then(response => result = { status: 'success', response })
        .catch(error => result = { status: 'error', error })

    return result;
}
0
Piter 19 févr. 2021 à 20:50