Javascript 电影API:如何返回值?

Javascript 电影API:如何返回值?,javascript,api,web,Javascript,Api,Web,我正在使用电影数据库API。我不能解决的问题是,当我用Movie的id调用函数时,返回“keys”变量。我是JavaScript新手,所以我不能解决这个问题。希望有人能帮助我,提前谢谢 const APIURL = "https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=[MY API KEY HERE]&page-1"; getMovies(APIUR

我正在使用电影数据库API。我不能解决的问题是,当我用Movie的id调用函数时,返回“keys”变量。我是JavaScript新手,所以我不能解决这个问题。希望有人能帮助我,提前谢谢

const APIURL = "https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=[MY API KEY HERE]&page-1";     
getMovies(APIURL)
async function getMovies(url)
{
    const resp = await fetch(url);
    const respData = await resp.json();
    showMovies(respData.results)
}
        async function getTrailer(id)
    {
         const resp = await fetch(`https://api.themoviedb.org/3/movie/${id}/videos?api_key=[MY API KEY HERE]&language=en-US`);
         const respDataa = await resp.json();
         let results = respDataa.results;
         let keys = results[0].key;
         return keys;
    }
    
    
    function showMovies(movies){
      movies.forEach(movie => {
           const modals = document.createElement('div');
         modals.classList.add('modal');
         modals.innerHTML = `  <a target="_blank" href ="https://www.youtube.com/watch?v=${getTrailer(movie.id)}">Watch Trailer</a>`

}
const apirl=”https://api.themoviedb.org/3/discover/movie?sort_by=popularity.desc&api_key=[此处为我的API密钥]&第1页“;
getMovies(APIURL)
异步函数getMovies(url)
{
const resp=等待获取(url);
const respData=wait resp.json();
放映电影(respData.results)
}
异步函数getTrailer(id)
{
const resp=等待提取(`https://api.themoviedb.org/3/movie/${id}/videos?api_key=[MY-api key HERE]&language=en-US`);
const respDataa=wait resp.json();
让结果=respDataa.results;
设keys=results[0]。key;
返回键;
}
功能展示电影(电影){
电影。forEach(电影=>{
const modals=document.createElement('div');
modals.classList.add('modal');
modals.innerHTML=``
}
}异步函数在JavaScript中返回a。
只需在函数末尾添加
返回键

然后你可以做:

getTrailer(528085).then(data => {
 // do something with the data
})
您还可以处理错误:

getTrailer(528085)
  .then(data => {
    // do something with the data
   })
  .catch(err => {
    /* 
    An error occured. You can use err.toString() to convert the error into a string
    */
})
如果要立即从异步函数(或承诺)获取返回的数据,请将逻辑放入异步函数中,然后只需执行以下操作:

let keys = await getTrailer(528085)
下面是如何处理async/await中的错误:

try {
  let keys = await getTrailer(528085)
}
catch(err){
    /* 
    An error occured. You can use err.toString() to convert the error into a string
    */
}
顺便说一句,正如Designer所说,不要将API密钥保存在客户端。任何人都可以看到您的API密钥。使用服务器将API响应返回给客户端。

异步函数在JavaScript中返回a。
只需在函数末尾添加
返回键

然后你可以做:

getTrailer(528085).then(data => {
 // do something with the data
})
您还可以处理错误:

getTrailer(528085)
  .then(data => {
    // do something with the data
   })
  .catch(err => {
    /* 
    An error occured. You can use err.toString() to convert the error into a string
    */
})
如果要立即从异步函数(或承诺)获取返回的数据,请将逻辑放入异步函数中,然后只需执行以下操作:

let keys = await getTrailer(528085)
下面是如何处理async/await中的错误:

try {
  let keys = await getTrailer(528085)
}
catch(err){
    /* 
    An error occured. You can use err.toString() to convert the error into a string
    */
}

顺便说一句,正如Designer所说,不要将API密钥保存在客户端。任何人都可以看到您的API密钥。使用服务器将API响应返回给客户端。

首先,如果您将代码发布到某个地方,请始终隐藏您的API密钥(即使它是私有存储库,您也不应该这样做)

其次,如果要返回多个键,可以映射结果以从每个键中提取id,然后执行返回:

async function getTrailer(id)
{
     const resp = await fetch(`https://api.themoviedb.org/3/movie/${id}/videos?api_key=04c35731a5ee918f014970082a0088b1&language=en-US`);
     const respDataa = await resp.json();
     let results = respDataa.results;
     return results.map(({ key }) => key);
}

首先,如果您将代码发布到某个地方,请始终隐藏api密钥(即使它是私有存储库,也不应该这样做)

其次,如果要返回多个键,可以映射结果以从每个键中提取id,然后执行返回:

async function getTrailer(id)
{
     const resp = await fetch(`https://api.themoviedb.org/3/movie/${id}/videos?api_key=04c35731a5ee918f014970082a0088b1&language=en-US`);
     const respDataa = await resp.json();
     let results = respDataa.results;
     return results.map(({ key }) => key);
}

我们必须等待,否则就要回来(这是一个承诺)

功能放映电影(电影){
//使forEach回调异步
movies.forEach(异步(电影)=>{
console.log(getTrailer(movie.id))//Promise{}
const trail=wait getTrailer(movie.id);
log({trailer});
const modals=document.createElement(“div”);
modals.classList.add(“模态”);
modals.innerHTML=`;
});
}

我们必须等待,否则,我们将返回(这是一个承诺)

功能放映电影(电影){
//使forEach回调异步
movies.forEach(异步(电影)=>{
console.log(getTrailer(movie.id))//Promise{}
const trail=wait getTrailer(movie.id);
log({trailer});
const modals=document.createElement(“div”);
modals.classList.add(“模态”);
modals.innerHTML=`;
});
}

感谢您的回复和建议。我理解这个想法,但它给了我数组中的值,如['xxxxxxxx'];因此是否可以这样做返回结果。map({key[0]})=>key);并且它正在返回未完成的承诺,我无法获得结果。感谢您的回复和建议。我理解这个想法,但它在数组中为我提供了类似['xxxxxxxx']的值;因此是否可以这样做返回结果。map({key[0]}=>key);它正在返回promise pending,我无法得到结果。嘿,非常感谢你的回复和建议,所有这些都给了我想法,但仍然存在问题。我尝试了你的方法,但无法获得我想要的确切值。它正在返回promise pending。我有另一个函数来调用此函数,id为,但当它调用时getTrailer()函数然后返回promise pending。我看到了正确的promise结果,但无法获取并使用。我尝试了。然后仍然存在相同的问题。我将编辑我的帖子,并提供更多详细信息。您可以尝试在HTML中的脚本标记中添加“type=module”。然后,您只需将${getTrailer(movie.id)}更改为${Wait getTrailer(movie.id)}你也可以尝试使函数showMovies异步化。我尝试了两种方法,但都不起作用。它仍然返回承诺待定。嘿,非常感谢你的回复和建议,所有这些都给了我想法,但仍然存在问题。我尝试了你的方法,但我无法得到我想要的确切值。它返回承诺待定。我很抱歉使用另一个函数调用此id为的函数,但当它调用getTrailer()函数时,它返回的承诺将被挂起。我看到承诺结果是正确的,但无法获取并使用。我尝试了。然后,但仍然存在相同的问题。我将编辑我的帖子,以放置更多详细信息。您可以尝试添加“type=module”在HTML中的脚本标记中。然后,您可以简单地将${getTrailer(movie.id)}更改为${await getTrailer(movie.id)}您还可以尝试使函数showMovies异步。我尝试了这两个函数,但它们都不起作用。它仍然返回承诺挂起。