tmdb ничего не возвращает и иногда возвращает значение

Я пытаюсь получить случайный заголовок фильма из tmdb, код работает, но есть неприятная проблема, некоторые случайные числа не возвращают абсолютно ничего, как я могу зациклить или сделать что-то или попробовать случайные числа, пока не получу результат? Я предполагаю, что в идентификаторах фильмов tmdb есть пробелы!

const tmdb = require('tmdbv3').init('---');

 function randomMovie(callback){
          var r = Math.floor(Math.random()*1000);
          tmdb.movie.info(r, (err ,res) => {
           var x = res.title
           callback(x);
        })};
          
randomMovie(function(title){console.log(title)})

2 ответа

Если вы осмотрите заголовки ответа и посмотрите на код состояния, держу пари, вы получите 404 (не найден) назад, так как идентификатор был удален. И вы не получите "ничего обратно", API TMDB возвращает набор ошибок с кодами, чтобы вы могли устранить неполадки в том, что происходит. Это задокументировано здесь.

В зависимости от того, что вы делаете, вам поможет знание того, какие идентификаторы доступны заранее. Для этого есть несколько загружаемых файлов, о которых вы можете прочитать в документации.

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

'use strict';

const tmdb = require('tmdbv3').init('8b39b6f141f42e463b507151122d0971');

function randomMovie(callback) {
    const r = Math.floor(Math.random() * 1000);
    tmdb.movie.info(r, (err, res) => {
        const x = res.title
        callback(x);
    })
};

function tryTenTimes() {
    let firstTitle;
    for (let i = 0; i < 10; i++) {
        randomMovie(title => {
            if (!firstTitle) {
                firstTitle = title;
                console.log(firstTitle);
            }
        });
    }
}

tryTenTimes();

Это уродливый обходной путь, который делает 10 запросов и берет первый действительный.

РЕДАКТИРОВАТЬ: меня попросили сделать один с циклом while, и вот как мне удалось это сделать

'use strict';

const tmdb = require('tmdbv3').init('8b39b6f141f42e463b507151122d0971');

function randomMovie(callback) {
    const r = Math.floor(Math.random() * 1000);
    tmdb.movie.info(r, (err, res) => {
        const x = res.title
        callback(x);
    })
};
function tryWhileTimes() {
    let firstTitle;
    while (!firstTitle) {
        return new Promise((resolve, reject) => {
            randomMovie(title => {
                if (!firstTitle) {
                    firstTitle = title;
                    console.log(firstTitle);
                    resolve();
                }
            });
        });
    }
}

tryWhileTimes()
Другие вопросы по тегам