【问题标题】:Express.js : how export an asynchronous result of a promise within my moduleExpress.js:如何在我的模块中导出承诺的异步结果
【发布时间】:2020-03-18 15:49:28
【问题描述】:

在我的 express.js 应用程序中,我有 2 个模块:

第一个是初始化模块,我在第二个开头调用它;主模块:

ma​​inModule.js

const result = require('initilalizerModule')
...

initilalizerModule.js:

const soap = require('soap');
const path = require('path');

//passed en params for DAO
const endpoint = 'https://myurl.com';

const url = path.resolve(__dirname, 'mycontract.wsdl');
const soapOptions = {
    forceSoap12Headers: true,
    connection: 'keep-alive',
    disableCache: false
};

function initialize() {
    console.log("test") 
    return new Promise((resolve,reject) => {
         soap.createClient(url, soapOptions, function (err, RESULT) {
            if (err) {
                reject('err');
            }
            else {
                client.setEndpoint(endpoint);
                resolve(RESULT);
            }
        });
    })
}

module.exports =  {
    myResult : ....
}

我有这个异步的initialize() 方法,它带来了RESULT

我的目的是如何从我的initilizerModule 中导出这个RESULT 对象,以便之后在我的mainModule 中使用?

【问题讨论】:

    标签: javascript node.js express promise


    【解决方案1】:

    您必须了解异步编程。 require 默认是同步的和缓存的。在某些任务异步之后要执行的任何操作。您必须使用回调。这是一个基本示例。

    // main.js

    const {init} = require("./provider")
    init((data) => {
        console.log(data) // somedata
    })
    

    //provider.js

    const someDelay = () => new Promise(r => {
        setTimeout(() => r("somedata"), 1000)
    })
    exports.init = (cb) => {
        someDelay().then(cb)
    }
    

    如果您使用的是最新的 node.js。您可以使用异步/等待。 异步/等待版本

    // main.js

    const {init} = require("./provider")
    async function start() {
        const data = await init()
        console.log(data) // somedata
    }
    start()
    

    // 提供者.js

    const someDelay = () => new Promise(r => {
        setTimeout(() => r("somedata"), 1000)
    })
    exports.init = async () => {
        return await someDelay()
    }
    

    希望这能回答您的问题!干杯。

    【讨论】:

      【解决方案2】:

      快速浏览一下,您可以将 initialize() 函数定义为一个变量,您可以将其导出,例如const myResult = function initialize() {...

      然后使用

      module.exports =  { myResult }
      

      【讨论】:

        猜你喜欢
        • 2018-08-12
        • 1970-01-01
        • 2017-08-14
        • 1970-01-01
        • 2019-10-20
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        • 2017-10-13
        相关资源
        最近更新 更多