返回函数函数中的值

时间:2017-08-26 11:58:08

标签: javascript node.js

以下代码段返回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) })

};

有人能指出原因吗?

2 个答案:

答案 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))