javascript - Express.js : how export an asynchronous result of a promise within my module

标签 javascript node.js express promise

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

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

ma​​inModule.js

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

initializerModule.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 中使用?

最佳答案

您必须了解异步编程。 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()

//provider.js

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

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

关于javascript - Express.js : how export an asynchronous result of a promise within my module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58996502/

相关文章:

javascript - 为什么 Lodash _.find 方法返回未定义?

javascript - 不同 block 中的事件部分开始和结束标记

javascript - 如何加载分数高于 100 的最新帖子?

node.js - 使用 Socket.io [Express, Socket.io, Sequelize] 发出 Sequelize 结果时出错

javascript - 通过 Ajax "POST"请求渲染布局 (Jade)

javascript - FB.Event.subscribe ('auth.login' )不会每次都会触发?

node.js - 在node.js中我无法将变量传递给类的成员函数

javascript - Sequelize.js如何按多列划分的结果进行排序?

javascript - nodejs fs.exists()

javascript - 以 gzip 格式从 node.js 服务器向客户端发送 socket.io 响应数据