Получить текст из ответа REST

Я использую fetch для получения данных из моей службы REST. Как только появится ответ, я хочу получить сообщение об ошибке, если оно есть, и отобразить его пользователю (пользователь в основном я).

fetch(address, attributes).then(response => {
    if (!response.ok) {
        if (response.status === 404) {
            return {
                text: "Server not found!",
                status: "danger"
            };
        }
        return {
            text: response.text(),
            status: "danger"
        };
    }
    return {
        text: "Success!",
        status: "success"
    };
}

response.text()Часть является важным: Моим Backend посылает javax.rs reponse с String , как объект, например , «Error». Здесь я хочу прочитать его, но ответ. {"Msg": "[error]"} возвращает только объект Promise, который только возвращает больше объектов Promise при их разрешении.

Я также попытался использовать, reponse.json().msgа затем проанализировать его здесь, вместо этого, но это тоже не сработало.// Success test case fetch("https://jsonplaceholder.typicode.com/posts/1").then(response => { if (!response.ok) { if (response.status === 404) { return { text: "Server not found!", status: "danger" }; } return response.text().then(text => { return { text: text, status: "danger" }; }) } return { text: "Success!", status: "success" }; }).then(resp => { console.log("result:", resp); }) // Failure test case 404 fetch("https://jsonplaceholder.typicode.com/posts/Not_Exist").then(response => { if (!response.ok) { if (response.status === 404) { return { text: "Server not found!", status: "danger" }; } return response.text().then(text => { return { text: text, status: "danger" }; }) } return { text: "Success!", status: "success" }; }).then(resp => { console.log("result:", resp); }) // For testing Errors other then 404, i changed 404 error in the code because i couldn't get other HTTP Errors from placeholder api fetch("https://jsonplaceholder.typicode.com/posts/Not_Exist").then(response => { if (!response.ok) { if (response.status === 999) { return { text: "Server not found!", status: "danger" }; } return response.text().then(text => { return { text: text, status: "danger" }; }) } return { text: "Success!", status: "success" }; }).then(resp => { console.log("result:", resp); })

reactjs,rest,promise,fetch,

1

Ответов: 1


1

text()

Да text()функция возвращает объект обещания . Таким образом, одним из решений может быть использование этого способа:

fetch(address, attributes).then(response => {
    if (!response.ok) {
        if (response.status === 404) {
            return {
                text: "Server not found!",
                status: "danger"
            };
        }

        return response.text().then(text => {
            return {
                text: text,
                status: "danger"
            };
        })
    }
    return {
        text: "Success!",
        status: "success"
    };
})

json()Функция может использоваться таким же образом:

response.json().then(json => {
    return {
        text: json.msg,
        status: "..."
    };
})

Счастливое кодирование!

reactjs, отдых, обещают, принеси,
Похожие вопросы
Яндекс.Метрика