0

これは私が使用しているパッケージのバージョンです:

node.js  0.10.3
express  3.4.4
jade     0.35.0
xml2js   0.2.8

奇妙な問題に直面しています。2 番目の 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」はコンソールに表示されず、例外はスローされません...

問題を解決するために私が見つけた唯一の方法は、次のように、タイムアウトを指定して 2 番目の ajax 呼び出しを行うことです。

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

誰かが私に何が悪いのか教えてくれますか? ファイルアクセスの問題かそのようなものだと思います。

ありがとう !

4

1 に答える 1