在一个函数的函数中返回一个值
下面的代码片段返回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))