Javascript 我对一个变量使用module.exports,但在另一个文件中检索该变量会返回未定义的值

Javascript 我对一个变量使用module.exports,但在另一个文件中检索该变量会返回未定义的值,javascript,node.js,variables,module,Javascript,Node.js,Variables,Module,我有一个文件来处理验证码解析,在captcha.js中有一个变量module.exports.taskCaptchas=[] 在consortium.js中,我有const captcha=require(“./captcha.js”) 当我尝试使用captcha.taskCaptcha[0]在consortium.js中检索一个值时,它返回未定义的值,但我已确认其中有一个值。我做错了什么 Captcha.js module.exports.taskCaptchas = []; ipcMain

我有一个文件来处理验证码解析,在captcha.js中有一个变量module.exports.taskCaptchas=[] 在consortium.js中,我有const captcha=require(“./captcha.js”) 当我尝试使用captcha.taskCaptcha[0]在consortium.js中检索一个值时,它返回未定义的值,但我已确认其中有一个值。我做错了什么

Captcha.js

module.exports.taskCaptchas = [];

ipcMain.on("updateCaptchaQueue", (event, token) => {

            global.captchaQueue.shift();
            console.log('New captcha token received. Captcha token: ' + token)
      console.log("Sending to task")
      module.exports.taskCaptchas.push(token)
            console.log(module.exports.taskCaptchas[0])
      console.log(module.exports.taskCaptchas[0] == token)

            if (global.captchaQueue.length >= 1) {
                module.exports.requestCaptcha(global.captchaQueue[0], false)
            } else {
                module.exports.capWin.hide();
            }
        });
Consortium.js

const captcha = require('./captcha.js')

function solveCap(productID, formKey, attributeID){
        ipcRenderer.send("captcha","Consortium")
        const capHandler = () => {
        console.log(captcha.taskCaptchas[0])
        if (captcha.taskCaptchas[0] == undefined || captcha.taskCaptchas[0] == '') {
        setTimeout(() => capHandler(), 1000);
        }else{
          var response = captcha.taskCaptchas[0];
          setTimeout(atc, delayTime, productID, formKey, attributeID, response);
          return;
        }
        }
        capHandler();
      }

我尝试这样做是为了验证您的模块定义(基本上是相同的,但没有函数):

这是输出:


我认为您需要在
setTimeout(()=>capHandler(),1000)上给它更多的时间
为了等待taskCaptcha数组将被
ipcMain.on(“updateCaptchaQueue”
事件填充。让我们给它2秒或3秒时间。

module.exports
类似于
return
,在为其赋值之前模块将返回。@Quentin因此module.exports.taskCaptchas=[]不正确?我将如何更改它?查看副本,导出一个承诺。当验证码处理程序将重复查找要推送到数组中的值,以便它仍将等待时,为什么我需要一个承诺?@Quentin异步调用似乎没有问题,更多的是范围问题?我可以看到数组已经更新了我在captcha.js中进行的检查,但与此同时,即使在令牌被推送到数组后的几秒钟,captcha处理程序仍然显示未定义

    // taskcaptchas.js
    const captchas = [];
    setInterval(() => {
        captchas.push("token");
    }, 3000);

    module.exports = { captchas };


    //consortium.js
    const taskCaptchas = require("./taskcaptchas.js");

    setInterval(() => {     
        console.log(taskCaptchas.captchas); 
    }, 1000);