NativeScript getJSON искаженный ответ - PullRequest
0 голосов
/ 27 мая 2019

При попытке получить данные из OMDb API, в Postman результат возвращается нормально, а функция getJSON возвращает данные неструктурированными

Я уже пробовал использовать типизированный интерфейс

export interface ApiResponse {
    Search: Movies[]; 
    totalResults: string;
    Response: string;
}

export interface Movies {
    title: string;
    year: number;
    poster: string;
    imdbId: string;
    type: string;
}

Это код getJSON

return getJSON<any>(
            this.apiUrl + this.apiKey + "&s=Harry-potter&page10"
        ).then(r => {
            console.log(r);
        });

, который возвращает затем JSON искажен

LOG from device : {
LOG from device : "imdbID": "tt1201607",
LOG from device : "Type": "movie",
LOG from device : "Poster": "https://m.media-amazon.com/images/M/MV5BMjIyZGU4YzUtNDkzYi00ZDRhLTljYzctYTMxMDQ4M2E0Y2YxXkEyXkFqcGdeQXVyNTIzOTk5ODM@._V1_SX300.jpg"
LOG from device : },
LOG from device : {
LOG from device : "Year": "2011",
LOG from device : "Search": [
LOG from device : "Title": "Harry Potter and the Deathly Hallows: Part 2",
LOG from device : {
LOG from device : "Title": "Harry Potter and the Sorcerer's Stone",
LOG from device : "Year": "2001",
LOG from device : "imdbID": "tt0241527",
LOG from device : "Type": "movie",
LOG from device : },
LOG from device : {
LOG from device : "Title": "Harry Potter and the Chamber of Secrets",
LOG from device : "Poster": "https://m.media-amazon.com/images/M/MV5BNjQ3NWNlNmQtMTE5ZS00MDdmLTlkZjUtZTBlM2UxMGFiMTU3XkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg"

Ожидая возвращения от Почтальона, как это:

{
    "Search": [
        {
            "Title": "Harry Potter and the Deathly Hallows: Part 2",
            "Year": "2011",
            "imdbID": "tt1201607",
            "Type": "movie",
            "Poster": "https://m.media-amazon.com/images/M/MV5BMjIyZGU4YzUtNDkzYi00ZDRhLTljYzctYTMxMDQ4M2E0Y2YxXkEyXkFqcGdeQXVyNTIzOTk5ODM@._V1_SX300.jpg"
        },
        {
            "Title": "Harry Potter and the Sorcerer's Stone",
            "Year": "2001",
            "imdbID": "tt0241527",
            "Type": "movie",
            "Poster": "https://m.media-amazon.com/images/M/MV5BNjQ3NWNlNmQtMTE5ZS00MDdmLTlkZjUtZTBlM2UxMGFiMTU3XkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg"
        },
        {
            "Title": "Harry Potter and the Chamber of Secrets",
            "Year": "2002",
            "imdbID": "tt0295297",
            "Type": "movie",
            "Poster": "https://m.media-amazon.com/images/M/MV5BMTcxODgwMDkxNV5BMl5BanBnXkFtZTYwMDk2MDg3._V1_SX300.jpg"
        }
    ],
    "totalResults": "80",
    "Response": "True"
}

1 Ответ

0 голосов
/ 27 мая 2019

Перед console log используйте другой then (я уверен, что вы должны сделать это с обещанием) и resolve возвращаемый результат следующим образом или reject в случае ошибки. Вы также можете добавить console log в блоке catch, чтобы увидеть тело error:

return new Promise((resolve, reject) => {
   fetch(
            this.apiUrl + this.apiKey + "&s=Harry-potter&page10"
        )
        .then(res => res.json())
        .then(r => {
            console.log(r);
            resolve(r)
        })
        .catch(err => reject(err))
})

Метод fetch уже возвращает Promise, поэтому вам не нужно return a new Promise, вы можете просто объединить .then() после fetch. На мой взгляд, предпочтительнее использовать resolve и reject. Это должно решить проблему. Также см. Документы для получения в Native Script здесь: Fetch

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