【发布时间】:2019-08-23 15:39:04
【问题描述】:
我有一个循环遍历 javascript 对象的键的递归函数。这用于查找名称为“文件名”的所有键。当条件匹配时,我需要调用一个回调函数 base64,它将图像转换为 base64。我的问题是这个任务需要很长时间,并且由于它的异步性,循环甚至在它转换第一张图像之前就完成了。我试过使用异步库,但没有用,我很确定这是由于函数的递归性质。如何在回调返回结果之前暂停 foreach 循环的执行。
功能是
const iterate = (obj) =>
{
Object.keys(obj).forEach((key) =>
{
if(key === 'filename')
{
base64.encode(`https://example.com/${obj[key]}`, { string: true }, (errr, encr) =>
{
obj[key] = encr;
});
}
if(typeof obj[key] === 'object' && obj[key] !== null)
{
iterate(obj[key]);
}
});
};
【问题讨论】:
-
你为什么要找到钥匙?你可以检查是否有一个密钥
filename -
你为什么要这样做?
-
嗯,我想检查是否有名为文件名的键,然后在找到它时对该键进行一些操作。该对象包含许多嵌套结构
-
你仍然不需要在每个循环中等待异步代码完成,直到你不想在循环完成之前对异步代码的结果做任何事情,你不需要等待它。跨度>
-
但是我在循环期间使用异步代码的结果来覆盖 obj[key] 的值。我注意到的行为是我能够在我的 console.logs 完成写入屏幕之前得到 express 的响应
标签: javascript node.js loops asynchronous