Асинхронная / ожидающая функция возвращает неопределенный - PullRequest
0 голосов
/ 23 апреля 2020

Да, я ищу раньше, и да, это другой вопрос о функции await / asyn c ...

Заранее прошу прощения, если мой вопрос дублируется, но я не нашел решения. ..

// get result of a poll
async function foo(param) {
    const REACT_OPTS = ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣', '6️⃣', '7️⃣', '8️⃣', '9️⃣', '? '];
    const opts = {
        'key': 'val',
        'other_key': 'other_val'
    };
    const baz = await get_array_baz(param);
    let results = {
        total: 0,
        tab: []
    };

    let r = 0;
    baz.each(function(obj) {
        results.total += obj.num;
        results.tab.push({
            count: obj.num,
            emoji: REACT_OPTS[r]
        });
        r++;
    });

    console.log('results', results);
    return {opts, results};
}

// close a poll
async function bar() {
    // Get poll opts/results and publish channel
    const { opts, res } = await foo(param);
    console.log('bar', opts, res);
}

console.log

> results {
    total: 3,
        tab: [
        { num: 1, emoji: '1️⃣' },
        { num: 0, emoji: '2️⃣' },
        { num: 0, emoji: '3️⃣' },
        { num: 1, emoji: '4️⃣' },
        { num: 0, emoji: '5️⃣' },
        { num: 0, emoji: '6️⃣' },
        { num: 1, emoji: '7️⃣' }
    ]
}
> bar {
    key: 'val',
    other_key: 'other_val'
} undefined

Как это возможно? Одна строка может записать результат, следующая строка не определена ... И еще более странно: почему opts может пройти, а не results?

1 Ответ

2 голосов
/ 23 апреля 2020

Вы экспортируете {opts, results} из функции foo . А в функции bar вы должны выполнить деструктурирование с таким же именем, как { opts, results } вместо { opts, res }.

, попробуйте снова запустить свой код с помощью функции ниже bar:

async function bar() {
    // Get poll opts/results and publish channel
    const { opts, results } = await foo(param);
    console.log('bar', opts, results);
}

Тем не менее, если вы хотите использовать res, укажите псевдоним для результатов, таких как const { opts, results:res } = await foo(param);

...