2017-02-24 62 views
0

在這個異步映射中,最終回調參數在註銷'in events'之前被調用。 (我只是使用console.log來避免過度複雜化)...異步映射 - 早期執行回調

因此,我登錄'最後一個cb'的地方是在所有'在地圖'中但在事件發生之前獲取日誌。如何阻止最終的回調直接射擊?

const addEvents = (seasons, cb) => { 
async.map(seasons, (season, seasonCb) => { 
    console.log('in map'); 
    Model.Events.find({season_id: season._id.toString()}, (err, events) => { 
    if (err) { 
     console.log('in err'); 
     return seasonCb(err); 
    } 
    console.log(events, 'events'); 
    }); 
    console.log('finish'); 
    seasonCb(null, season); 
}, (err) => { 
    if (err) { 
    console.log('in err'); 
    return cb(err); 
    } 
    console.log(seasons, 'in last cb'); 
    cb(null, seasons); 
}); 
}; 
+0

在事件之前也完成了嗎? –

+0

是的,它會登錄地圖,然後在每次迭代之後直接完成,然後在上一次cb中,然後事件持續。 –

+0

通過將seasonCb(null,season)移入find函數並將季節添加爲最後一個函數的參數來解決此問題 –

回答

0

查找是異步操作。你可以做的是以下幾點:

let promise = Model.Events.find(....) 

promise.then((error,data) => { 
    console.log('finish'); 
}) 

這應該使完成後,你有任何一段代碼,你找到內部調用。