Как сделать `return` с уважением async / await в JS? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь заставить этот код (метод класса) возвращать String.

async sign() {
    const txt = 'ddddd';
    const result = await crypto.createHash('md5').update(txt, 'binary').digest('hex');
    return result;
}

Проблема в том, что он игнорирует await и возвращает Promise. Возвращаемое значение этой функции используется в качестве заголовка HTTP-запроса, и в то время как npmlog говорит, что это

apisign: Promise { 'faaa3f1409977cbcd4ac50b5f7cd81ec' }

в сетевом трафике, пойманном Wireshark, я вижу

apisign: [object Promise]

Как мне сделать return относительно await, или как мне написать так, чтобы он возвращал String?

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Функция async всегда возвращает Обещание .

Если вы вызываете sign() внутри другой функции, тогда вам нужно await для нее, и для этого необходимо, чтобы функция вызывающего абонента также была функцией async и т. Д. И т. Д.

В конце концов, в коде верхнего уровня вы должны использовать обычный синтаксис .then().catch() для ожидания выполнения Обещания:

sign()
    .then((result) => {
        // do something with the result (e.g. put it into the response header)
        console.log(result);
    })
    .catch((err) => {
        // something wrong happened and the Promise was rejected
        // handle the error
        console.log(`There was an error: ${err.message || err}`);
    });
0 голосов
/ 23 февраля 2019

Вам потребуется await ответ функции async.

const getURL = (title, page) => `https://jsonmock.hackerrank.com/api/movies/search/?Title=${title}&page=${page}`


const callService = async (title, page) => {
  let response = await fetch(getURL(title, page));
  return await response.json();
}

async function callApi() {
  let data = await callService('spiderman', 1);
  console.log(data.data.length);
}

callApi();
0 голосов
/ 05 июля 2018

Вы не должны возвращать значение async function как есть, так как это Promise

await перед сериализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...