我有一个类似数组的结构,它公开了异步方法。异步方法调用返回数组结构,这些结构反过来公开更多异步方法。我正在创建另一个 JSON 对象来存储从这个结构获得的值,所以我需要小心跟踪回调中的引用。
我已经编写了一个蛮力解决方案,但我想学习一个更惯用或更干净的解决方案。
- 对于 n 级嵌套,该模式应该是可重复的。
- 我需要使用 promise.all 或一些类似的技术来确定何时解决封闭例程。
- 并非每个元素都必然涉及进行异步调用。因此,在嵌套的 promise.all 中,我不能简单地根据索引对 JSON 数组元素进行分配。尽管如此,我确实需要在嵌套的 forEach 中使用 promise.all 之类的东西,以确保在解析封闭例程之前已经进行了所有属性分配。
- 我正在使用 bluebird promise lib 但这不是必需的
这是一些部分代码 -
var jsonItems = [];
items.forEach(function(item){
var jsonItem = {};
jsonItem.name = item.name;
item.getThings().then(function(things){
// or Promise.all(allItemGetThingCalls, function(things){
things.forEach(function(thing, index){
jsonItems[index].thingName = thing.name;
if(thing.type === 'file'){
thing.getFile().then(function(file){ //or promise.all?
jsonItems[index].filesize = file.getSize();