Node.js:异步fs.writeFile队列是否正在创建竞争条件?

时间:2017-04-12 19:39:32

标签: javascript node.js asynchronous

我正在尝试将async与node.js一起使用来处理多个传入的POST请求以编辑JSON文件。无论我如何重构它,它总是会编辑其中一个而不是另一个。我虽然使用async.queue会强制操作顺序处理?我做错了什么?

我的代码:

var editHandler = function(task, done) {

    var req = task.req;
    var res = task.res;

    fs.stat( "./app//public/json/" + "data.json", function(err, stat) {
        if(err == null) {
            console.log('File exists');
        } else if(err.code == 'ENOENT') {
            console.log("Error");
        } else {
        console.log('Some other error: ', err.code);
        }
    });
    console.log(req.params.id);
    console.log(req.body);

    fs.readFile( "./app//public/json/" + "data.json", 'utf8', function (err, data) {
       data = JSON.parse( data );
       data[req.params.id] = req.body.school;
       //console.log( data );
       fs.writeFile("./app//public/json/" + "data.json", JSON.stringify(data), function (err){
        if(err) {
            return console.log(err);
        }
       })
       res.redirect('/');
    });
};

//Make a queue for the services
var serviceQ = async.queue(editHandler, 20);

serviceQ.drain = function() {
    console.log('all services have been processed');
}

app.post('/edit_school/:id', function(req, res) {

   serviceQ.push({req: req, res: res }) 

})

提前感谢任何见解!我非常擅长将node.js用于除npm / webpack以外的任何内容。

0 个答案:

没有答案