Как использовать свойства JSON, не вызывая ошибки - PullRequest
0 голосов
/ 01 мая 2020

Я вызываю выборку на сервере и пытаюсь использовать данные JSON из нее, не вызывая ошибки.

Это выборка, которая работает нормально и возвращает JSON, если Я удаляю проблемную строку c ниже.

fetch("https://dash.stannp.com/api/v1/postcards/create?api_key=" + secret + "&", requestOptions)
    .then(response => response.text())
    .then(result => {
        let item = result
        console.log("item: " + item)
        //this line causes an error
        console.log("pdf: " + item.data.pdf)
        return (item)
    })

Строка console.log("item: " + item) записывает это так:

item: {
    "success":true,
    "data": {
         "pdf": "https:\/\/dash.stannp.com\/api\/v1\/storage\/get\/rum\/1588348478\/pdf-samples\/7476-cda247f3-c634-43bf-8d03-731908549fb1-A6-4add27e8-b08f-4495-846b-7d904e.pdf",
         "id":"0",
         "created":"2020-05-01T15:54:38+00:00",
         "format":"A6",
         "cost":"0.59"
    }
}

пока все хорошо, но затем строка console.log("pdf: " + item.data.pdf), которая сразу после первого возвращает ошибку.

Что я делаю не так, и что мне нужно сделать, чтобы иметь возможность использовать PDF?

В случае, если это уместно, я думаю, что у меня есть некоторые проблемы с обещаниями, так как возврат срабатывает до завершения извлечения.

Полный код, если он полезен:

export function previewStannpSingleCard2(card) {
    return getSecret("stannp_API")
        .then((secret) => {
            var myHeaders = {
                "Content-Type": "application/json"
            }

            var myBody = JSON.stringify({
                "size": "A6",
                "test": "true",
                "template": "69185",
                "front": card.front,
                "recipient": {
                    "lastname": card.recipient,
                    "address1": card.address1,
                    "address2": card.address2,
                    "town": card.town,
                    "postcode": card.postcode,
                    "country": card.country, //NB GB / US
                    "author_1": card.author1,
                    "author_2": card.author2,
                    "author_3": card.author3,
                    "author_4": card.author4,
                    "author_5": card.author5,
                    "signature": card.fullSignature,
                    "small_signature": card.smallSignature,
                    "text_block_1": card.textBlock1,
                    "text_block_2": card.textBlock2,
                    "text_block_3": card.textBlock3,
                    "text_block_4": card.textBlock4,
                    "text_block_5": card.textBlock5,
                    "title_text_1": card.titleText1,
                    "fancy_text_1": card.fancyText1,
                    "left_heading_1": card.leftHeading1,
                    "right_heading_1": card.rightHeading1,
                    "right_block_2": card.rightBlock2
                }
            })

            var requestOptions = {
                method: 'POST',
                headers: myHeaders,
                body: myBody,
                redirect: 'follow'
            };

            fetch("https://dash.stannp.com/api/v1/postcards/create?api_key=" + secret + "&", requestOptions)
                .then(response => response.text())
                .then(result => {
                    let item = result
                    console.log("item: " + item)
                    //console.log("pdf: " + item.data.pdf)
                    return (item)
                })
                .catch(error => console.log('error', error));
         })
}

Спасибо

1 Ответ

0 голосов
/ 01 мая 2020

Внимательно посмотрите на свой код

.then(response => response.text())

Вы говорите, что он дает вам текст, но вы используете его как JSON.

.then(response => response.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...