node.js - 异步系列未按预期顺序工作

标签 node.js express asynchronous formidable

我有一个函数可以将用户输入(当前名为 app.json)从浏览器(客户端)下载到服务器

function downloadUpload(callback){
    //Using formidable node package for downloading user input to server
    var form = new formidable.IncomingForm();
    form.on('fileBegin', function(name, file) {
        file.path = file.name;
    });

    form.parse(req, function(err, fields, files) {
        res.writeHead(200, { 'content-type': 'text/plain' });
        res.write('received upload:\n\n');
        res.end(util.inspect({ fields: fields, files: files }));
    });

    callback(null);


}

我有另一个函数,它获取上面下载的文件并将其转换为所需的格式(final.json),如下所示。

 function UpdateCode(callback){

    var obj = fs.readFileSync('app.json', 'utf8');

    var object = JSON.parse(obj);
    var data2 = [];
    for (var j = 0; j < object.length; j++) {
        if (object[j].value == "TEST") {
            data2.push(object[j]);
        }
    }
    console.log(data2);
    fs.appendFile('final.json', JSON.stringify(data2), function(err) {
        if (err) throw err;
        console.log('Saved!');
    });

    callback(null);



}

我希望它们按顺序运行,所以我使用了这样的异步系列方法

async.series([
    downloadUpload, 
    UpdateCode


    ],function(err,result){
        if(err) throw err;
        else{
            console.log(result);
        }
    });

问题是正在下载文件(app.json)并显示错误,指出当前文件夹或目录中不存在 app.json。我哪里出错了?

最佳答案

这可能就是您所需要的。

function downloadUpload(callback) {
  //Using formidable node package for downloading user input to server
  var form = new formidable.IncomingForm();
  form.on('fileBegin', function(name, file) {
    file.path = "app.json";
  });

  form.parse(req, function(err, fields, files) {
    res.writeHead(200, {
      'content-type': 'text/plain'
    });
    res.write('received upload:\n\n');
    res.end(util.inspect({
      fields: fields,
      files: files
    }));
  });

  form.on('end', function() {
    callback(null);
  });
} 
<小时/>
function UpdateCode(callback) {

  var obj = fs.readFileSync('app.json', 'utf8');

  var object = JSON.parse(obj);
  var data2 = [];
  for (var j = 0; j < object.length; j++) {
    if (object[j].value == "TEST") {
      data2.push(object[j]);
    }
  }
  console.log(data2);
  fs.appendFile('final.json', JSON.stringify(data2), function(err) {
    if (err) throw err;
    console.log('Saved!');
    callback(null);
  });
}
<小时/>
async.series([
  downloadUpload,
  UpdateCode
], function(err, result) {
  if (err) throw err;
  else {
    console.log(result);
  }
});
<小时/>

还可以使用nodemon -e js app.js。否则 nodemon 将在 json 上传后立即重新启动程序。

关于node.js - 异步系列未按预期顺序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46341669/

相关文章:

node.js - Geddy 的数据库适配器

javascript - 一旦在 node.js Web 服务器上生成图像(使用 express),显示图像的最简单方法是什么?

javascript - Redis 队列将列表中的项目存储为 [object Object]

javascript - 带有 iOS Swift 请求超时的 Express.js 服务器

node.js - 为什么 .find() 显示快速的 MongoDB 事务时间和慢的 node.js 事务时间,而 .findOne() 显示完全相反的情况?

javascript - 涵盖 for 循环和异步回调的通用解决方案

node.js - 我可以使用按位运算符来请求 Loopback 模型吗?

jquery - digital ocean 服务器上的 apache2/nodejs/express - 如何在没有地址使用错误的情况下监听公共(public)端口(80)

c# - 开始结束异步方法调用

javascript - 将 Observables 链接到 ajax 调用的队列列表