【问题标题】:Node.js module: export async function [duplicate]Node.js 模块:导出异步函数
【发布时间】:2019-10-28 17:56:43
【问题描述】:

given example 中演示了如何从自定义模块中导出变量或函数。如何以类似的方式导出异步函数,然后从 app.js 调用它,例如:

// app.js

var things = require("./someThings");

await things.getSomeThingsAsync();

编辑:

上述链接指向的示例(Stackoverflow 上的答案)包含以下代码:

// someThings.js

(function() {
    var someThings = ...;

    ...

    module.exports.getSomeThings = function() {
        return someThings();
    }

}());

// main.js

var things = require("someThings");
...
doSomething(things.getSomeThings());

假设在模块的封装函数内部存在一个异步函数,您希望将其公开给导入模块的任何人。例如:

(function() {
    ...
    const doSomethingAsync = (time) => {
        return new Promise(resolve => {
            setTimeout(() => resolve(42), time)
        })
    }

    //const doSomething = async () => {
    async function doSomething () {
        let answer1 = await doSomethingAsync(3000)
        let answer2 = await doSomethingAsync(1000)
        return answer1 + answer2
    }
    ...
    /*module.exports.doSomething = function() {
        return doSomething();
    }*/
    module.exports.doSomething = async function() {
        return doSomething();
    }
}());

您将如何以与为someThings 完成的原始答案类似的方式公开doSomething 函数 - 如何以这样的方式更改引用的答案,以便在导出函数时,它可以让您使用await 关键字?然后它将被用作:

// app.js

var things = require("./someThings");

console.log(await things.doSomething());

我尝试了多种方法,但我总是得到:

SyntaxError: await is only valid in async function

【问题讨论】:

标签: node.js asynchronous node-modules


【解决方案1】:

这可能是这个问题的duplicate

您可以简单地将函数(或函数表达式)分配到`module.exports'属性(或只是整体) >.

例如:

async function AsyncStuff () { ... }

module.exports.myAsyncThing = myAsyncStuff;

【讨论】:

    【解决方案2】:

    你可以试试这个:

    
    //yourModule.js
    
    let yourModule={};
    yourModule.you=async()=>{
        //something await...
    }
    modules.export = yourModule;
    
    
    //app.js
    
    let yourModule = require('<pathToModule>');
    
    async function test()
    {
        await yourModule.you();  //your `await` here
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      var things = require("./someThings");
      let result = getResult();
      async function getResult() {
          return await things.getSomeThingsAsync();
      }
      

      【讨论】:

        【解决方案4】:

        您误解了错误。它说

        SyntaxError: await is only valid in async function

        不是“用于异步函数”

        您的导出没有问题。根本不可能在标记为async 的函数之外使用await。因此错误在app.js。应该是:

        var things = require("./someThings");
        
        async function app () {
            console.log(await things.doSomething());
        }
        
        app().then(() => console.log('done calling app()'));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-27
          • 2021-10-12
          相关资源
          最近更新 更多