Как получить значение в асинхронной функции, используя узел JS? - PullRequest
0 голосов
/ 11 июля 2019

Я пытался вызвать функцию, чтобы вернуть данные для определения внутри асинхронной функции. но не возвращая данные, он возвращает асинхронную функцию. Как получить данные в асинхронной функции может дать мне любое решение.

Образец .js

function data()
{
    return "hai"
}

let dict = {sample:async () => {
    return (await data())
}}


console.log(await dict['sample'])

Ожидаемый результат

hai

Я получил вывод

[AsyncFunction: sample]

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

В вашем коде dict['sample'] является асинхронной функцией.Если вы хотите получить значение из этой функции, вы должны вызвать эту асинхронную функцию, которая затем возвращает обещание.Затем вы можете использовать .then() или await в этом обещании, чтобы получить значение из него.

И ваша функция data() НЕ является функцией async, поэтому вам не следует использовать await наэто.

Чтобы разбить это на несколько шагов, чтобы лучше понять это:

function data() {
    return "hai"
}

let dict = {
    sample: async () => {
        return data();
    }
};

let fn = dict['sample'];
fn().then(val => {
    console.log(val);
});  

Или, если бы все это было внутри функции async, вы могли бы использовать await вместо.then() чтобы получить значение.Итак, если вам нужен однострочный для этого:

console.log(await (dict['sample']()));

В любом случае, функция async всегда возвращает обещание (при вызове этой функции) и два способа получения значенияс .then() или await.

2 голосов
/ 11 июля 2019

Это должно быть:

onsole.log(await (dict['sample']()))

В противном случае вы просто возвращаете саму функцию, а не вызываете ее.

...