我无法在Nodejs上使用fs写一个txt文件,有人可以帮我吗?

时间:2017-01-19 04:23:39

标签: javascript node.js mongodb asynchronous mongoose

我试图在Nodejs上使用Fs写一个txt文件,但是我收到以下错误。

call_and_retry_last分配失败 - 处理内存不足

这是我正在使用的代码:

UserPayment.find({} ,function (error , usersdata){
  count=usersdata.length;
  usersdata.forEach(function(user){
     sum+=user.Amount;
     fs.appendFile('unapec-appap.txt', 'D'+padding(user.Id,13)+user.IdType+padding(user.Account,15)+padding(user.Amount,20),function (err) {
        console.log(err);
     });
  });
  callback();
});

UserPayment 是使用mongoose调用mongolab数据库

2 个答案:

答案 0 :(得分:0)

您可以async逐行追加。

var async = require("async");

UserPayment.find({} ,function (error , usersdata){
  count=usersdata.length;
  async.each(usersdata, function(user, cb){
    sum+=user.Amount;

    fs.appendFile('unapec-appap.txt', 'D'+padding(user.Id,13)+user.IdType+padding(user.Account,15) + padding(user.Amount,20), function (err) {
        cb();
    });
  }, function(err){
    callback();
  })
});

答案 1 :(得分:0)

永远不要将Array.forEach函数用于大数据。此外,forEach函数会阻止代码,并且在大多数情况下,节点无法正常工作,而节点主要基于非阻塞代码(异步代码)。

你可以尝试'async'库,它具有非常有用的异步javascript编程功能。

对于这种情况,请使用Async.Each函数,方法如下:

async.each(arrayofusers, appendfilesfunction, function(err){
  // if any of the saves produced an error, err would equal that error
});

针对您的特定问题:

var async = require('async');

UserPayment.find({} ,function (error , usersdata){
    count=usersdata.length;

    async.each(userdata, function(user,next){
        sum+=user.Amount;
        fs.appendFile('unapec-appap.txt', 'D'+padding(user.Id,13)+user.IdType+padding(user.Account,15)+padding(user.Amount,20)
                      ,function (err) {
                          if(err) return next(err); 
                          next();
         });
    }, function(err){
        if(err) console.log(err); // All errors will be handled here
    });


});