-1
我正在使用bluebird
& lodash
並試圖弄清楚如何在迭代對象後返回承諾?例如,我想添加一個鍵/值對每個對象,我想打印結果後,再爲其添加一個鍵/值對每個對象:如何在javascript中迭代對象後返回承諾
var cars = {
audi:[
{
model:'r8',
year:'2012'
},
{
model:'rs5',
year:'2013'
}
],
ford:[
{
model:'mustang',
year:'2012'
},
{
model:'fusion',
year:'2015'
}
],
kia:[
{
model:'optima',
year:'2012'
}
]
}
_.forOwn(cars, function(value, key) {
key.processed = true;
}).then(function(cars) {
//print modified cars object here
console.log(cars);
});
有人能幫忙嗎?
在此先感謝!
'_.forOwn'是同步 - 擺脫'.then(功能(汽車){'和最後的'});' - 等voilà - 沒有承諾需要 –
以前的評論者說,嘗試從簡單的迭代返回承諾沒有任何好處,它不是異步的 - 它的運行速度與javascript引擎可以執行的速度一樣快。但是,如果你所說的是,迭代需要啓動一系列異步的進程,那麼這與你實際詢問的那個完全不同。在這種情況下,你可以做一些'map'來返回promise數組(每個元素都有一個),然後在每次promise後返回,檢查它是否是最後一個,並且發出'done'的承諾。 – ErikE
所以要確認 - '_.forOwn'總是會在'console.log(cars)'之前完成。 @ErikE在對象上做「地圖」工作嗎?我以爲'map'只適用於陣列... –