在我的express.js应用程序中,我有2个模块:
第一个是初始化模块,我在第二个的开头调用它;主模块:
mainModule.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/