在一个函数的函数中返回一个值

下面的代码片段返回undefined而不是预期的链接数组。 apiCall()来自这里 。

是否有可能返回数组? 如果这样怎么样? 如果不是为什么?

 async function fetchData() { await apiCall('https://www.googleapis.com/youtube/v3/search?q=leeroyjenkins&maxResults=4&part=snippet&key={KEY}', (error, response, body) => { return JSON.parse(body).items.map(i => 'https://www.youtube.com/watch?v=' + i.id.videoId) }) } fetchData().then(r => console.log(r)) 

编辑:下面的代码似乎工作;

 async function fetchData(param, fn) { await apiCall('https://www.googleapis.com/youtube/v3/search?q=leeroyjenkins&maxResults=4&part=snippet&key={KEY}', (error, response, body) => { fn(JSON.parse(body).items.map(i => 'https://www.youtube.com/watch?v=' + i.id.videoId)) }) } fetchData('lee', function(Ar) { console.log(Ar) }) }; 

有人能指出为什么吗?

await是用来等待一个承诺apiCall不是一个,它使用了继续传递的风格约定。 所以,你只需要在apiCall的callback被调用时解决一个新的承诺:

 async function fetchData() { return await new Promise((resolve) => { apiCall('https://www.googleapis.com/youtube/v3/search?q=leeroyjenkins&maxResults=4&part=snippet&key={KEY}', (error, response, body) => { // resolve the promise here resolve(JSON.parse(body).items.map(i => 'https://www.youtube.com/watch?v=' + i.id.videoId)) }) }); } 

更改:

 async function fetchData() { await apiCall('https://www.googleapis.com/youtube/v3/search?q=leeroyjenkins&maxResults=4&part=snippet&key={KEY}', (error, response, body) => { return JSON.parse(body).items.map(i => 'https://www.youtube.com/watch?v=' + i.id.videoId) }) } 

至:

 async function fetchData() { return await apiCall('https://www.googleapis.com/youtube/v3/search?q=leeroyjenkins&maxResults=4&part=snippet&key={KEY}'); } 

尝试在这里承诺执行:

  fetchData().then(r => console.log(r))