Как записать ответ от fetch api - PullRequest
0 голосов
/ 08 июня 2019

Я использую Promise для регистрации ответа от API. Но каждый раз, когда тело регистрируется как ноль. Скорее всего из-за асинхронного вызова

Для вызова API из fetch.

function getDetails(url){
    return new Promise((resolve, reject) => {
        fetch(url, {mode: 'no-cors'}).then(res => {
            resolve(res);      
        }, error => {
            console.log(err);
        })
    })
}

var u = "https://get.geojs.io/v1/ip/country.json";
getDetails(u).then(function(resp){
    console.log(resp);    
})

Я ожидаю ответ API в консоли

1 Ответ

2 голосов
/ 08 июня 2019

fetch() уже возвращает Promise, поэтому избавьтесь от new Promise(...) части

function getDetails(url) {
    return fetch(...).then(...);
}

fetch() возвращает Response объект , а не то, что уже было проанализировано для вас. Вы должны позвонить .json(), чтобы получить ответ, проанализированный JSON.parse().

function getDetails(url) {
    return fetch(url, {mode: 'no-cors'}).then(response => response.json());
}

Это уже должно работать, но с вашей установкой вы получите синтаксическую ошибку:

SyntaxError: JSON.parse: неожиданный конец данных в строке 1 столбца 1 данных JSON

Чтобы исправить это, удалите mode: 'no-cors'

Добавление всего этого вместе даст нам:

function getDetails(url) {
    return fetch(url).then(response => response.json());
}

var u = "https://get.geojs.io/v1/ip/country.json";
getDetails(u).then(function(data) {
    console.log(data);
})
...