我有一个包含大约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网址。
答案 0 :(得分:0)
将回调传递给您的解密函数。然后你可以在解密函数完成后编写你的行。 Here is an example
答案 1 :(得分:0)
使用asyn.foreach可以轻松解决您的问题。 它将为你阵列中的每个元素异步调用你的解密,最后你可以得到你的结果./
答案 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)
}