我试图在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数据库
答案 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
});
});