Javascript 如何在node js中包含文件并在其中执行函数
我有两个文件,我想在file2中包含所有必须在脚本加载时执行的函数,我尝试了模块导出,但当file2执行时,它不会更新文件1中的变量“kList” 我将包括文件2中的所有函数,这些函数将更新文件1中的变量 文件1:-Javascript 如何在node js中包含文件并在其中执行函数,javascript,node.js,Javascript,Node.js,我有两个文件,我想在file2中包含所有必须在脚本加载时执行的函数,我尝试了模块导出,但当file2执行时,它不会更新文件1中的变量“kList” 我将包括文件2中的所有函数,这些函数将更新文件1中的变量 文件1:- var kList=[]; var exlist=require("./file2.js"); exlist.lister() setInterval(function(){ console.log(kList);},3000) 文件2:- var request= requi
var kList=[];
var exlist=require("./file2.js");
exlist.lister()
setInterval(function(){
console.log(kList);},3000)
文件2:-
var request= require('requests');
function lister(){
request.get("www.example.com",function(err,response,body){
body.forEach(body=>{
kList.push(body.item)
});
});
}
module.exports.lister=lister;
一个模块中的代码无法访问另一个模块中的变量 要使
lister
函数能够访问分配给klist
的数组,需要将其作为参数传递
exlist.lister(klist);
及
在NodeJS中,您不能从另一个模块访问变量 如果您需要设置一个值,您应该以一种方式编写模块,使其返回或获取您需要更改的变量 例如,您可以重写模块2以接受变量:
module.exports = function (kList) {
request("www.example.com",function(err,response,body){
body.forEach(body=>{
kList.push(body.item)
})
})
}
在单元1中:
const module2 = require('./module2');
var kList = [];
moduel2(kList);
更好的方法是让module2返回值,因为它是一个异步函数,您应该从module1传递回调函数
您还可以预处理数据并仅传递结果:
module.exports = function (callback) {
request(url, function () {
var data = [];
body.forEach(/* process the data*/);
callback(data);
});
}
一种更简洁的方法是向模块承诺:
// module 2
module.exports = function () {
return new Promise(function (resolve, reject) {
request(url, function (err,response,body) {
if (err) {
reject(err);
return;
}
resolve(body.item);
});
});
}
因此,在模块1中,您可以得到承诺的结果:
// module 1
var kList=[];
const module2 = require('./module2');
module2().then(items => (kList = items.reduce(/* ... */))
.catch(error => (/* handle the error here*/));
由于这是一个承诺,您可以根据需要在module2或module1中链接任意多个层,请记住从then()返回一些内容。我认为您在参数中没有传递kList
File1:
var kList = [];
var exlist = require('./file2');
exlist.lister(kList)
setInterval(function () {
console.log(kList);
}, 3000)
File2:
function lister(kList) {
body = [1,2,3,4]
body.forEach(item => {
kList.push(item)
});
}
module.exports.lister = lister;
使用
require()
function@niklaz我尝试过使用它,但它没有更新文件中的变量1您问题的措辞意味着您希望该文件被编辑,现在只更改它导致加载到内存中的变量。是这样吗?您也没有检查变量值的代码,因此如何判断它没有被更新?你需要提供一份报告。@Quentin我已经更新了code@Smitk-您说过您使用的是require
。我在你的代码中不需要这个。你需要提供一个新的解决方案。
// module 1
var kList=[];
const module2 = require('./module2');
module2().then(items => (kList = items.reduce(/* ... */))
.catch(error => (/* handle the error here*/));
File1:
var kList = [];
var exlist = require('./file2');
exlist.lister(kList)
setInterval(function () {
console.log(kList);
}, 3000)
File2:
function lister(kList) {
body = [1,2,3,4]
body.forEach(item => {
kList.push(item)
});
}
module.exports.lister = lister;