首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Process.nextTick还是child_process?

Process.nextTick还是child_process?
EN

Stack Overflow用户
提问于 2013-06-20 20:07:08
回答 1查看 313关注 0票数 1

我正在尝试允许用户以csv格式导出他们的联系人列表。我对如何运行export_connect_csv()函数感到困惑。我应该把它放入子进程还是放在process.nextTick中?

代码语言:javascript
复制
function export_connect_csv(user_id, file_location){
      mysqlPool.getConnection(function(err, connection){
        var csv_row = "Email,First Name,Last Name,Status,Created\n";
        function processRow (row) {
          var csv_row = row.email+','+row.first_name+','+row.last_name+','+row.status+','+row.created+"\n";
          fs.appendFile(file_location, csv_row, function (err) {
            if(err){
              throw err;
            }
          });
        }
        fs.appendFile(file_location, csv_row, function (err) {
          if(err){
            throw err;
          }
          var query = connection.query('SELECT * FROM contacts where user_id = "'+user_id+'"');
          query
            .on('error', function(err) {
              //handle error
            })
            .on('fields', function(fields) {

            })
            .on('result', function(row) {
              processRow(row);
            })
            .on('end', function() {
              //email now

              console.log('done');
            });
        });
      });
    }

    var exportContacts = function(req, res){
      var user_id = req.params.user_id || 0;

      export_connect_csv(user_id);
      res.json({});
    };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 21:22:23

您不需要使用这两个函数,只需调用该函数即可。所有这些代码都将同步运行,包括getConnection和fs.appendFile。但是,在两个用户尝试同时导出的情况下,您将遇到冲突。您有以下选项:

1)每次调用该函数时都会传递一个唯一的file_name

2)你保持事物的本来面目,并使用fs.appendFileSync来确保它们不会相互重叠,但这会阻止你

3)或者,最好的解决方案可能是对Process.nextTick执行您打算执行的操作,但您应该使用setImmediate和appendFileSync,以便能够同时同步来自多个用户的写入(一次只写入一行,以避免长时间阻塞)

文件名(

() {fs.appendFileSync(‘setImmediate’,JUST_A_SINGLE_ROWW) });

这是因为递归process.nextTick可能会使事件循环变得饥饿,并有效地阻塞您(因此使用setImmediate),并且您需要使用fs.appendFileSync,因为两个用户可能会同时写入同一个文件。

关于setImmediate与nextTick的更多信息:setImmediate vs. nextTick

有关appendFile的更多信息,请访问:http://nodejs.org/api/fs.html#fs_fs_appendfile_filename_data_options_callback

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17213261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档