0

我正在尝试从 tmdb 获取随机电影标题,代码正在运行,但有一个令人沮丧的问题,一些随机数绝对没有返回任何内容,我如何循环或做某事或尝试随机数直到我得到结果?我猜 tmdb 电影的 id 号码有差距!

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

4

2 回答 2

0

我不推荐使用这个 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()
于 2017-06-26T15:15:54.833 回答
0

如果您检查响应标头并查看状态代码,我敢打赌您会收到 404(未找到),因为 ID 已被删除。而且您不会得到“没有任何回报”,TMDB API 返回一组错误代码,以便您排除正在发生的事情。这是记录在这里

根据您的工作,提前了解可用的 ID 将对您有所帮助。您可以在文档中阅读一些可下载的文件

于 2017-06-27T02:54:25.650 回答