Node.js在异步函数中返回API响应

时间:2018-08-26 16:39:54

标签: node.js asynchronous async-await

我编写了以下代码,以从Apiseeds歌词api中检索歌曲歌词。

const apiseeds = require("apiseeds-lyrics");
const apiseedskey = "MY_API_KEY";

async function getLyrics(artistName, songName)
{
    return await apiseeds.getLyric(apiseedskey, artistname, songName, 
    (response) => {
        return response;
    });
}


var artist = "Darius Rucker";
var title = "Wagon Wheel";
var lyrics = await getLyrics(artist, title)
console.log(lyrics);

我还应该提到,第二个代码块包含在具有异步回调函数的eventEmitter.on事件内。

只要代码运行,我都会在控制台中得到undefined

1 个答案:

答案 0 :(得分:1)

asyncawait仅可用于处理返回Promises(而非回调)的异步函数。您应该可以将呼叫转换为使用Promises或使用其他库。

我们使用await的主要原因是在继续执行代码之前等待承诺解决:

const result = await codeThatReturnsPromise()
console.log(result)

我们可以将您的代码转换为此:

// async here means it returns a promise
async function getLyrics(artistName, songName)
{
  return new Promise((resolve, reject) => {
    apiseeds.getLyric(apiseedskey, artistname, songName, (response) => resolve(response))
  })
}

var artist = "Darius Rucker";
var title = "Wagon Wheel";
var lyrics = await getLyrics(artist, title)
console.log(lyrics);