以下代码段返回undefined
而不是预期的链接数组。 apiCall()来自here。
是否可以返回阵列?如果是这样的话?如果不是为什么?
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) })
};
有人能指出原因吗?
答案 0 :(得分:0)
await
用于等待以获取 Promise 。 apiCall
不是一个,它使用延续传递样式约定。因此,您只需在调用apiCall
回调时解决新承诺:
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))
})
});
}
答案 1 :(得分:0)
变化:
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))