Как правильно экспортировать функциональный модуль Asyn c? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть файл asyncAwait.js, который имеет простую функцию:

async function doStuff() {
    return(`Function returned string.`);
}

module.exports.doStuff = doStuff;

В другом модуле testing.js, я вызываю, и все работает, как ожидалось:

var functions = require(`./functions`);

(async () => {

    const test = await functions.asyncAwait.doStuff();

    console.log(test);

})();

Это журналы "Функция вернула строку." на консоль.

Все хорошо.

Однако, если я использую топор ios в asyncAwait.js:

const axios = require(`axios`);

async function doStuff(parameter) {

    const url = `https://jsonplaceholder.typicode.com/posts/1`;

    const getData = async url => {
        try {
            const response = await axios.get(url);
            const data = response.data;
            console.log(data);
        } catch (error) {
            console.log(error);
        }
    };

    return(getData(url));
}

module.exports.doStuff = doStuff;

Тогда в testing.js:

var functions = require(`./functions`);

(async () => {

    const test = await functions.asyncAwait.doStuff();

    console.log(test);

})();

Этот журнал undefined.

Почему во втором примере вызов функции возвращает undefined?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020
module.exports.doStuff = doStuff;

Могу ли я предложить вам:

module.exports=doStuff;

Или

exports.doStuff

и, возможно, но не уверен, что вы пытаетесь достичь заменить

return(getData(url));

от

return(()=>{return getData(url)});
0 голосов
/ 11 февраля 2020

В вашем примере getData не имеет возврата. В этом случае ваша функция неявно вернет undefined. Чтобы исправить это, вы можете изменить эту функцию следующим образом:

    const getData = async url => {
    try {
        const response = await axios.get(url);
        return response.data;
    } catch (error) {
        return error
    }
};
...