我有一个带有两个数组作为属性的对象:
我想通过连续运行promise来填充数组。 我获取了promise的结果,并映射了一个函数来装饰数组中的所有项目。
虽然一个数组被填充并保留,而另一个数组仅在<add name="MpnModelDC" connectionString="metadata=res://*/Model.MpnModel.csdl|res://*/Model.MpnModel.ssdl|res://*/Model.MpnModel.msl;provider=System.Data.SqlClient;provider connection string="Server=SRV3;Database=DB1_DEMO;MultipleActiveResultSets=True;"" providerName="System.Data.EntityClient" />
函数中填充,但是最后该数组返回的仍为空。
您能帮助理解为什么吗?
我检查了Promise是否实际上已返回,并且确实在一种情况下有效,而在另一种情况下却没有。
这是我的伪代码:
map
答案 0 :(得分:1)
在第二种情况下,map
回调返回一个Promise,这种情况与第一种情况完全不同。
在第二种情况下,您需要等待所有这些承诺,并可以使用Promise.all
。
第二部分的代码如下:
.then( myObj => {
return Promise.all(myObj.nodes.map(node => decorateNode(node.source)));
}).then(decorations => {
myObj.decorators = decorations.map(decoration => {
decoration = decoration[node.source];
return ({
...
});
})
console.log('myObj.decorators', myObj);
return myObj;
})