【发布时间】:2016-08-29 21:16:37
【问题描述】:
我有一个包含大约 20K 条记录的数组。每条记录都包含一个加密列,其余的则不包含。当我使用 for 循环遍历每条记录并调用解密回调函数时,结果稍后会出现,因此解密的值始终为空。解密后,我想将整行写入 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 网址。
【问题讨论】:
-
尝试 async.forEach
-
你应该使所有的异步。没有办法“稍后”将几个字节正确地写入文件。您等待解密完成。当它完成时(不清楚,因为在要点中你没有提供对
decrypt的回调)你写入文件解密数据和同步获得的数据 -
为此写一个回调函数或者先全部解密再写入文件
-
我们如何知道它是行尾和呼叫关闭?是否有全局变量来保持跟踪计数并在回调中关闭它们?有没有这样的例子?
标签: node.js asynchronous