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