У меня есть объект с двумя массивами в качестве свойств:
Я хочу заполнить массивы, выполняя обещания последовательно.Я извлекаю результат обещаний и сопоставляю функцию для украшения всех элементов в моих массивах.
Пока один массив заполняется и сохраняется, другой заполняется только в функции map
, но вконец массива возвращается все еще пустым.
Можете ли вы помочь понять, почему?
Я проверяю, что Обещание действительно возвращено, и действительно, в одном случае оно работает, а не в другом.
это мой псевдокод:
function formatMyObject( arrayOfIds ) {
// initialize the objet
var myObj = {
decorators = [],
nodes = []
...
}
// I map the Promise reconciliate() and push the results in the array:
return reconciliateNode(arrayOfIds)
.then( data => {
data.map( node => {
// I fetch results, and myObj.nodes
myObj.nodes.push( { ... })
})
})
return myObj
})
.then( myObj => {
// myObj.nodes is now a NON empty array
// I want to the same with myObj.decorators:
var data = myObj.nodes
// I think I am doing just as above:
data.map( node =>
decorateNode(node.source)
.then( decoration => {
decoration = decoration[node.source]
myObj['decorators'].push( {
...
} )
// I check: the array is NOT empty and getting populated:
console.log('myObj.decorators', myObj)
debugger
})
)
// instead now, just after the map() function, myObj.decorators is EMPTY!
console.log('myObj.decorators', myObj);
debugger
return myObj
)
... // other stuff
}