gpt4 book ai didi

javascript - NodeJS - 需要的模块未同步工作

转载 作者:太空宇宙 更新时间:2023-11-03 23:11:44 25 4
gpt4 key购买 nike

据我阅读后的理解this问题,require(ModuleName) 是一个同步操作。

register-rmq.js 中,我编写了以下内容:

const amqp = require('amqplib/callback_api');

function main(){
return new Promise(function(resolve,reject){
amqp.connect('localhost:5672', function(error0, connection) {
if (error0) {
throw error0;
}
connection.createChannel(function(error1, channel) {
if (error1) {
reject(error1);
}
channel.assertQueue('', {
exclusive: true
}, function(error2, q) {
if (error2) {
reject(error2);
}
});
resolve(channel); //
});
});
})
}

main().then(function(result){
module.exports = {result}
})

在我的 controller.js 中,我有以下两行代码:

var channel = require('./register-rmq');
console.log(channel);

我对代码的期望是,在 contoller.js 中要求模块之后的行为我提供了我期望从我需要的模块中获得的对象,但是 我在 controller.js 中的 console.logpromise 返回之前执行,因此 channel Controller 中的对象为空。

我写的代码是错误的吗?或者我对这种情况下的操作如何运作感到困惑吗?

最佳答案

您已经强调导出模块是同步完成的;您不能等到 promise 得到解决(或任何异步操作)并期望同步导出正确的值。

这种情况下最合适的模式如下。

注册rmq.js

module.exports = main();

controller.js

var channel = require('./register-rmq');

channel.then(result => console.log(result));

关于javascript - NodeJS - 需要的模块未同步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com