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()