导出异步功能模块的正确方法是什么?

时间:2020-02-11 14:29:08

标签: javascript node.js async-await axios

我有一个文件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);

})();

这将记录“函数返回的字符串”。到控制台。

一切都很好。

但是,如果我在asyncAwait.js中使用axios:

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

在第二个示例中,为什么函数调用返回未定义?

2 个答案:

答案 0 :(得分:0)

在您的示例中,getData没有回报。在这种情况下,您的函数将隐式返回undefined。要修复它,您可以将该函数更改为以下内容:

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

答案 1 :(得分:0)

module.exports.doStuff = doStuff;

我可以建议您:

module.exports=doStuff;

exports.doStuff

,也许但不确定您要达到的目标 替换

return(getData(url));

通过

return(()=>{return getData(url)});