用于嵌套数据结构处理的递归异步JavaScript

use*_*766 6 javascript asynchronous promise

我正在寻找一个JavaScript函数,它将以下数据结构作为参数:

let data = [
  {value: 'a'},
  {delay: [
    {value: 'b'},
    {delay: [
      {value: 'c'}
    ]}
  ]},
  {value: 'd'}
];
Run Code Online (Sandbox Code Playgroud)

如您所见,数据结构是一个对象数组.每个对象都包含一个属性.这些属性中的每一个都是带有字符串的"值"或带有与其值相同类型的另一个数组的"延迟".

该函数应该向控制台打印每个"值"字符串,并在以相同方式处理延迟数组之前为每个"延迟"暂停两秒钟.该函数应支持任何深度的延迟嵌套.上面显示的两级深度延迟嵌套只是一个例子.

对于上面的示例数据,控制台的功能输出应该是(按此顺序,只有这个顺序):

a
b
c
d
Run Code Online (Sandbox Code Playgroud)

如何编写代码来实现此功能?

Jos*_*igo 5

您可以使用Promises和async/await:

let data = [
  {value: 'a'},
  {delay: [
    {value: 'b'},
    {delay: [
      {value: 'c'}
    ]}
  ]},
  {value: 'd'}
];

const delay = () => new Promise( res => 
  setTimeout( res, 2000) ) 

const recFn = async data =>{
  for(let obj of data){
    if(obj.value){
      console.log(obj.value)
    } else if(obj.delay){
      await delay();
      await recFn(obj.delay)
    }
  }
}

recFn(data);
Run Code Online (Sandbox Code Playgroud)