gpt4 book ai didi

javascript - 文件系统 readFile 和 xml2js parseString 的待处理请求

转载 作者:行者123 更新时间:2023-12-02 18:08:14 25 4
gpt4 key购买 nike

这是我正在使用的软件包的版本:

node.js  0.10.3
express 3.4.4
jade 0.35.0
xml2js 0.2.8

我遇到了一个奇怪的问题,我的第二个 ajax 请求(/tasks 的请求)处于挂起状态几分钟。

这里是我的 javascript 调用:

$('#add-task').click(function(){
$.post('/addTask', function(){
loadTasks();
});
});

function loadTasks(){
$.get('/tasks', function(tasks){
$('#tasks > tbody').html(tasks);
});
}

这是我的路线文件:

exports.addTask = function(req, res){
fs.readFile(xmlPath, function(err, data) {
parser.parseString(data, function (err, result) {
var ws = fs.createWriteStream(xmlPath),
xw = new XMLWriter(true, function(string, encoding) {
ws.write(string, encoding);
});
xw.startDocument('1.0', 'UTF-8').startElement(function() {
return 'tasks';
});
for(var i in result.tasks.task) {
var task = xmlTaskToObject(result.tasks.task[i]);
writeTaskToXml(xw, task);
}
req.body.index = (result.tasks.task !== undefined) ? result.tasks.task.length : 0;
writeTaskToXml(xw, req.body);
xw.endElement();
ws.end();
res.send('');
});
});
};

exports.tasks = function(req, res){
var tasks = [];

fs.readFile(xmlPath, function(err, data) {
if(err){
throw err;
}
parser.parseString(data, function (err, result) {
console.log("AFTER PARSER");
// parsing stuff
/*
...
*/
res.render('tasks', { tasks: tasks });
});
});
};

“AFTER PARSER”永远不会显示在控制台中,并且不会引发任何异常...

我发现解决该问题的唯一方法是执行第二个 ajax 调用并设置超时,如下所示:

$.post('/addTask', function(){
setTimeout(loadTasks, 100);
});

有人可以告诉我出了什么问题吗?我猜这是一个文件访问问题或类似的问题。

谢谢!

最佳答案

您没有发送回复。 res.render 不执行 res.send。

这应该有效:

        res.render('tasks', { tasks: tasks }, 
function(err, html) { res.send(html); } );

编辑:问题的另一部分涉及关闭文件。您需要等待 .end() 完成( http://nodejs.org/api/stream.html#stream_writable_end_chunk_encoding_callback ):

        xw.endElement();
ws.on('finish', function() {
res.send('');
});
ws.end();

关于javascript - 文件系统 readFile 和 xml2js parseString 的待处理请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com