繁体   English   中英

如何在递归获取中使用Promise?

[英]How to use promises with recursive fetch?

我正在使用访存来一次检索一棵树。 获取所有分支后,如何触发动作? 这棵树有多个分支,我事先不知道深度。

伪代码:

until Children is empty fetchChildren()

after all children are retrieved doSomething()

我找到了一些答案,但是它们只处理链式then(),而不处理树。

[edit]尽管不是强制性的,但我希望该解决方案可以在IE11中运行。 我已经在使用promise并获取polyfill。

只需首先等待获取图层元素,然后递归地继续处理子元素,然后等待:

async function fetchChildren(layer) {
  await Promise.all(layer.map(fetch));
  await Promise.all(layer.map(el => fetchChildren(el.children)));
}

fetch(el)必须是一个有前途的函数

这是一种使用递归异步函数来完成此操作的方法,该函数在返回诺言之前等待元素的子代的提取完成。

这样,当一切完成后,我们可以调用doSomething

 const tree = { url: 'http://www.json-generator.com/api/json/get/cevhxOsZnS', children: [{ url: 'http://www.json-generator.com/api/json/get/cguaPsRxAi' }, { url: 'http://www.json-generator.com/api/json/get/cguaPsRxAi', children: [{ url: 'http://www.json-generator.com/api/json/get/cfDZdmxnDm' }] }] }; function doSomething() { console.log("doing something"); } async function fetchIt(element) { if (element.children) { await Promise.all(element.children.map(fetchIt)); } return new Promise((resolve) => { console.log("fetching " + element.url); fetch(element.url).then(res => { console.log("done"); resolve(); }); }); } fetchIt(tree).then(doSomething); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM