我正在尝试从tmdb获取一个随机电影标题,代码正在运行但是有一个令人沮丧的问题,一些随机数返回absolutely nothing,我怎么能循环或做某事或尝试随机数直到我得到结果呢?我想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)})
答案 0 :(得分: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()
答案 1 :(得分:0)
如果您检查响应标头并查看状态代码,我打赌您的ID已被删除,因此返回404(未找到)。并且你不会得到“没有回来”TMDB API返回一组错误代码,你可以解决正在发生的事情。记录在案another answer。
根据您正在做的事情,提前知道可用的ID将对您有所帮助。有一些可下载的文件,您可以阅读here。