Можно ли вернуть объект JSON, используя fetch? - PullRequest
0 голосов
/ 09 июня 2018

Я три года пытался использовать API выборки для получения объекта JSON, я искал в основном все потоки, которые мог найти.Итак, у меня есть функция, которая использует fetch, я хочу, чтобы эта функция возвращала объект JSON, но когда я пытаюсь распечатать его, это объект Promise.Я обнаружил, что fetch действительно возвращает объекты Promise.Итак, если для fetch невозможно вернуть объект JSON, как я могу получить объект JSON из объекта Promise?Console.info в _ParseJSON правильно печатает нужный мне JSONObject, но из выборки невозможно восстановить JSON.

import React from 'react';

export class JSONObject {
constructor(_url) {
    this.URL = _url;
    this.importedJSON = null;

    this.state = {}; //Init getter setter
}

ParseCurrentUrl() {
    this.importedJSON = this._ParseJSON();
    console.info(this.importedJSON);
}

_ParseJSON() {
    return fetch(this.URL)
        .then(response => response.json())
        .then((responseJSON) => {
            const { statusCode, data } = responseJSON;
            console.info("_PARSE");
            console.info(responseJSON);
            return responseJSON;
        })
        .catch((e) => {
            console.error(e);
        })
}

set URL(_newUrl) { this.constructor.URL = _newUrl; }
get URL() { return this.constructor.URL; }
}

1 Ответ

0 голосов
/ 09 июня 2018

Вы сказали, что

console.info в _ParseJSON правильно печатает нужный мне JSONObject, но из выборки невозможно восстановить JSON

потому что вы не можете вернуть значение внутри обещания.

урок Асинхронные функции не возвращаются (или, по крайней мере, не возвращают надежно)

Если вы хотите, чтобы что-то происходило после асинхронной функции, вам нужно вызывать ее в асинхронной функции

, которую вы можете использовать

_ParseJSON() {
    return fetch(this.URL)
        .then(response => response.json())
        .then((responseJSON) => {
            const { status, data } = responseJSON;
            console.info("_PARSE");
            console.info(responseJSON);
            // set the value you want as an example
            this.importedJSON = responseJSON;
        })
        .catch((e) => {
            console.error(e);
        })
}

вместо этого

надеюсь, это поможет вам.

...