Node.js, возвращающий ответ API в асинхронной функции - PullRequest
0 голосов
/ 26 августа 2018

Я написал следующий код для извлечения текстов песен из apiced lyric 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 голосов
/ 26 августа 2018

async и await могут использоваться только для обработки асинхронных функций, которые возвращают обещания, но не обратные вызовы.Вы должны иметь возможность преобразовать свой вызов в использование 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);
...