0

我正在使用电影数据库 API 并尝试在 youtube 上播放预告片,因为我需要来自 JSON 响应的键值。我尝试了所有方法,但该函数要么返回承诺,要么返回未定义。我尝试使用回调来返回结果,但这也不起作用。

const fetch = require('node-fetch');
// function declaration 
async function trailer(id, callback) {
  var video = 'https://api.themoviedb.org/3/movie/' + id + '/videos?api_key=' + apiKey +'&language=en-US';
  var key = await fetch(video)
    .then(res => res.json())
    .then(json => callback(json.results[0].key));
}

// function call returns a promise (expected key string ex."Zftx5a")
trailer(id, function(result){return result;})
4

1 回答 1

-1

由于该fetch函数进行了异步调用,因此您的函数在 Promise 链解析之前trailer返回。key解决该问题的最简单方法是使用async函数,因此您的代码将类似于:

async function trailer(id) {
  var video = 'https://api.themoviedb.org/3/movie/' + id + '/videos?api_key=' + apiKey +'&language=en-US';
  return await fetch(video)
    .then(res => res.json())
    .then(json => json.results[0].key);  
}

但是,您必须考虑到async函数将返回一个承诺,因此您将不得不修改您的代码。

有关更多信息,请查看以下链接:

https://www.npmjs.com/package/node-fetch#common-usage

https://developers.google.com/web/fundamentals/primers/promises

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

于 2018-12-18T19:43:37.360 回答