在我的文件functions.js中我有两个函数:
var email, url1
function getFile(_callback){
email = fs.readFileSync("C:/Emails/" + items[2])
_callback(email);
}
function getUrl(){
getLatestMail(function(email) {
email.split(/\n/).forEach(function(line) {
i++;
if (i == 52) {
var test = new Buffer(line, 'base64').toString();
var regex = /=(.+?)"/g
var result1 = regex.exec(test);
url1 = result1[1].toString();
console.log(url1);
}
});
getUrl()
exports.resetUrl = url1;
我有一个文件test.js
var Functions = require('../pageobjects/functions.js');
var test = Functions.resetUrl;
console.log(test);
但它总是未定义! getUrl()中的console.log显示了良好的值。看起来导出不会等到函数getURl加载。解决这个问题的最佳方法是什么?在这个例子中,我删除了所有不必要的代码部分。
答案 0 :(得分:0)
我认为functions.js
的导出应为exports.resetUrl = url1
修改强>
您必须尝试其他方法,因为getUrl
方法执行异步操作,因此在设置url1
之前,您执行exports.resetUrl = url1
,因此它始终是未定义的。
我建议您在callback
函数中添加一些getUrl
参数,以便在test.js
文件中使用,以便访问url1
值
function getUrl(callback){
getLatestMail(function(email) {
email.split(/\n/).forEach(function(line) {
i++;
if (i == 52) {
var test = new Buffer(line, 'base64').toString();
var regex = /=(.+?)"/g
var result1 = regex.exec(test);
url1 = result1[1].toString();
console.log(url1);
// and here use the callback
callback(url1);
}
});
});
exports.resetUrl = getUrl;
然后你可以在test.js
var Functions = require('../pageobjects/functions.js');
Functions.resetUrl(function(url1){
console.log(url1);
});
这只是我首先想到的一个选项。我希望你明白这一点并理解为什么url1
在你的案例中一直没有定义。