当我尝试使用node 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/');
答案 0 :(得分:0)
可能是因为你有一个尚未关闭的Mongoose连接。
阅读完这些文件后,请致电mongoose.disconnect()
。
Node是一个异步平台,当解释器到达代码末尾时,它必须决定是否关闭它。它只能在事件循环被清除后安全终止。
在完全同步的程序中,不会向事件循环添加任何工作,并且在处理完最后一个表达式后终止它将始终是安全的。第一个程序就是这种情况。
在第二个程序中,对mongoose.connect
的调用会启动一些异步工作,这些工作将继续运行,直到您明确调用mongoose.disconnect
来清理连接。在那之前,解释器终止程序是不安全的,因为它不知道你是否已经完成了资源。
答案 1 :(得分:0)
你在评论中引用了.net.Node.js在两个具体的东西中有所不同。
设计是异步的。它期望即使你的代码没有运行,你也可以连接监听器,连接和类似的东西。这就是为什么 node 运行时如果检测到有优秀的侦听器就永远不会关闭程序。
使用Node.js,您的代码也可以充当服务器,而不是运行时。这意味着,在典型的.net,PHP等代码中,您编写的代码是按每个请求执行,而运行时(例如,IIS或诸如此类)将同时存在,从而执行新的调用。所以你的代码在没有请求时“退出”。
使用Node.js,你编写服务器。你写了一个require('http').listen(8080, function() {...});
所以你的代码必须总是“活着”,在那里等待请求。
在我的外行人看来,这就是为什么Node.js代码不会退出程序的原因,即使有一丝异步代码隐藏在某处。