Nodejs遍历数组并写入文件

时间:2016-05-04 12:19:36

标签: node.js asynchronous

我有一个包含大约20K记录的数组。每条记录包含一个加密列,其余的则不包含。当我使用for循环遍历每个记录并调用解密回调函数时,结果将在稍后出现,因此解密的值始终为null。解密后,我想将整行写入excel表,并在将数组中的每个元素写入文件后关闭该文件。这样做的最佳方式是什么?

var myArray = [{name:'ABC',accountNumber:'hsjdhsj%^==='},{name:'BCD',accountNumber:'hsjdhsj%^==='}];
for(var i=0; i< myArray.length; i++){
   myArray[i].decryptAccNumber = decrypt(myArray[i].accountNumber);  // async way to decrypt it 
   res.write(myArray[i]); //Writing to excel file
}
res.close();

现在,该文件仅包含姓名,帐号但不包含已解密的帐号。

关于如何处理同步和混合的这种要求的任何建议异步

----------已编辑------------------------

var callbackCount = myArray.length;
for(var i=0; i< myArray.length; i++)
{
   decrypt(myArray[i].accountNumber,function(decrypted){  
     myArray[i].decryptAccNumber=decrypted;
     res.write(myArray[i]); //Writing to excel file
     callbackCount--;
     if(callbackCount === 0){
       res.close();
     }
  });
}

这是https://gist.github.com/Grety/236c41acf006475f0eee768b64e4a7bc给出的解决方案 甚至,我认为相同的解决方案,但我个人不喜欢这个解决方案,因为它看起来像是在解决。 除了使用像callbackCounter这样的临时变量之外,还有其他更好的方法来解决这个问题吗?这是我想发布的确切问题。感谢Kyrylo Slatin发布精确问题的GIT网址。

3 个答案:

答案 0 :(得分:0)

将回调传递给您的解密函数。然后你可以在解密函数完成后编写你的行。 Here is an example

答案 1 :(得分:0)

使用asyn.foreach可以轻松解决您的问题。 它将为你阵列中的每个元素异步调用你的解密,最后你可以得到你的结果./

参考这个 https://github.com/caolan/async

答案 2 :(得分:0)

写这样的回调函数希望对此有所帮助

  for(var i=0; i< myArray.length; i++)
  {
    decrypt(myArray[i].accountNumber,function(decrypted){  
    myArray[i].decryptAccNumber=decrypted;
   res.write(myArray[i]); //Writing to excel file
    });

  }
  res.close()

你的derypt功能就像这样

  decrypt(number,callback){
   var decrypted= // you code of decryption

     callback(decrypted)
  }