Javascript 如何在node js中包含文件并在其中执行函数

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

我有两个文件,我想在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= 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;