@lebedev112

Почему await не работает?

Есть код, который делает запрос к стороннему API (в данном случае это API переводчика)

import unirest from 'unirest'

export const translateText = async (from, to, text) => {
    let req = unirest(
        'GET',
        'https://translated-mymemory---translation-memory.p.rapidapi.com/api/get'
    )

    // необходимые параметры для API запроса
    req.query({
        mt: '1',
        onlyprivate: '0',
        de: 'global-mangal@yandex.ru',
        langpair: `${from}|${to}`,
        q: text,
    })

    // api ключи и заголовки
    req.headers({
        'x-rapidapi-host':
            'translated-mymemory---translation-memory.p.rapidapi.com',
        'x-rapidapi-key': 'f0a80bec21msh80b014d3afb7629p1966c2jsn12fd481ec155',
        useQueryString: true,
    })

    // выдача результата
    await req.end(async function (res) {
        if (res.error) throw new Error(res.error)
        await req.json(res.body.matches[0].translation)
        console.log('output from translator.js: ', res.body.matches[0].translation)
        return res.body.matches[0].translation
    })
}


Есть код из фронта, который использует данный код:

const translate = async () => {
    const txt = await translateText('ru', 'en', 'Привет, как дела?')
    console.log('output from app.js', txt)
  }

  translate()


Результат кода такой: 5edf408831e3e222260555.png

Вопрос: почему значение переменной txt undefined? Почему await в данном случае не ждет результата выполнения функции translateText? И как решить проблему лучше всего в данном случае, если мне надо, код не выполнялся до тех пор, пока переменная txt не получит результат? Как бы вы решили проблему на моем месте?
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
потому что вы ничего из функции не возвращаете. соответственно возвращается undefined.
И с чего вы взяли что await не ждет? думаю он все ждет, просто то что происходит в коде отличается от того что вы думаете что там происходит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы