Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么节点程序永远不会终止?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么节点程序永远不会终止?

Javascript 为什么节点程序永远不会终止?,javascript,node.js,Javascript,Node.js,当我尝试使用节点filename.js运行这两个程序时,程序1将被终止,但程序2不会停止。似乎有些东西还在运行,我是不是错过了一些理解?我希望程序2在处理后会停止 计划1 function test(){ console.log("test"); } test(); 计划2 var Kml = require('./kmlSchema'); var moment = require('moment'); var fs = require('fs'); var tj = require

当我尝试使用
节点filename.js运行这两个程序时,程序1将被终止,但程序2不会停止。似乎有些东西还在运行,我是不是错过了一些理解?我希望程序2在处理后会停止

计划1

function test(){
    console.log("test");
}

test();
计划2

var Kml = require('./kmlSchema');
var moment = require('moment');
var fs = require('fs');
var tj = require('togeojson');
// node doesn't have xml parsing or a dom. use jsdom
var jsdom =  require('jsdom').jsdom;
var mongoose = require('mongoose');
//var cronJob = require('cron').CronJob;

mongoose.connect('mongodb://xxx');

function readfiles(path){

    fs.readdir(path, function(err, files){

        if(err) throw err;

        files.forEach(function(file){

            fs.readFile(path+file,{encoding:'utf-8'},function(err,content){

            });
        });
    });
}

readfiles('./path/');

可能是因为你有一个猫鼬连接,你还没有关闭

读完这些文件后打电话给我

节点是一个异步平台,当解释器到达代码末尾时,它必须决定是否关闭它。它只能在清除事件循环后安全终止

在完全同步的程序中,不会向事件循环中添加任何工作,并且在处理最后一个表达式后终止总是安全的。您的第一个程序就是这样


在第二个程序中,对
mongoose.connect
的调用将启动一些异步工作,这些工作将继续运行,直到您显式调用
mongoose.disconnect
以清理连接。在此之前,解释器终止程序是不安全的,因为它不知道您是否已完成资源的使用。

可能是因为您有一个尚未关闭的Mongoose连接

读完这些文件后打电话给我

节点是一个异步平台,当解释器到达代码末尾时,它必须决定是否关闭它。它只能在清除事件循环后安全终止

在完全同步的程序中,不会向事件循环中添加任何工作,并且在处理最后一个表达式后终止总是安全的。您的第一个程序就是这样


在第二个程序中,对
mongoose.connect
的调用将启动一些异步工作,这些工作将继续运行,直到您显式调用
mongoose.disconnect
以清理连接。在此之前,解释器终止程序是不安全的,因为解释器不知道您是否已经完成了资源的使用。

您在评论中引用了.net,Node.js在两个具体方面有所不同

  • 它被设计成异步的。它期望您即使在代码未运行时也能附加侦听器、连接和类似的东西。这就是为什么如果节点运行时检测到存在未完成的侦听器,它将永远不会关闭程序

  • 使用Node.js,代码还充当服务器,而不是运行时。这意味着,在一个典型的.net、PHP等代码中,您编写的代码是根据每个请求执行的,而运行时(比如IIS或诸如此类)将同时在那里执行新的调用。因此,当您的代码不在请求中时,“退出”

    使用Node.js,您可以编写服务器。您编写了一个
    require('http').listen(8080,function(){…})因此您的代码必须始终处于“活动”状态,并在那里等待请求


  • 在我的外行看来,这就是Node.js代码不退出程序的原因,即使有一点点异步代码挂在某个地方。

    您在评论中引用了.net,Node.js在两个具体方面有所不同

  • 它被设计成异步的。它期望您即使在代码未运行时也能附加侦听器、连接和类似的东西。这就是为什么如果节点运行时检测到存在未完成的侦听器,它将永远不会关闭程序

  • 使用Node.js,代码还充当服务器,而不是运行时。这意味着,在一个典型的.net、PHP等代码中,您编写的代码是根据每个请求执行的,而运行时(比如IIS或诸如此类)将同时在那里执行新的调用。因此,当您的代码不在请求中时,“退出”

    使用Node.js,您可以编写服务器。您编写了一个
    require('http').listen(8080,function(){…})因此您的代码必须始终处于“活动”状态,并在那里等待请求


  • 在我的外行看来,这就是为什么Node.js代码即使有一点点异步代码挂在某个地方也不会退出程序的原因。

    这不是仅仅因为mongoose保持连接打开吗?也许你应该
    断开连接
    ?你能把第二个程序最小化吗?例如,如果
    fs.reader
    files.forEach
    和/或
    fs.readFile
    是罪魁祸首,则删除
    mongoose
    引用。否则,如果是
    mongoose
    造成的,您应该能够删除所有
    fs
    文件
    内容。这不是因为mongoose保持连接打开吗?也许你应该
    断开连接
    ?你能把第二个程序最小化吗?例如,如果
    fs.reader
    files.forEach
    和/或
    fs.readFile
    是罪魁祸首,则删除
    mongoose
    引用。否则,如果归咎于
    mongoose
    ,您应该能够删除所有
    fs
    文件
    内容。我来自.net,以及为什么数据库连接会停止节点以终止程序,在.net中,即使我没有关闭连接,程序也会停止。我来自.net,以及为什么数据库连接会停止节点以终止程序,在.net中,即使我没有关闭连接,程序也会停止。