我在簡化我寫的代碼的可讀性方面有一些困難,到目前爲止我已經設法將代碼分離成兩個主要功能,但是我仍然遇到了嵌套的。然後()。我不確定是否有更簡單的方法來編寫這兩個函數。任何有關結構和指針的正確方向的建議都會得到真正的讚賞。嵌套.then()的承諾
我還應該強調,horsePostHandler.init()函數指的是一個不同的模塊。此示例中顯示的函數init()是racePostHandler的一部分。
RacePostHandler.js
function createHorseEntities(raceEntity) {
promises = horsePostHandler.init(raceEntity, race.Horse)
_.each(promises, function(promise){
promise.then(function(entity){
if (raceEntity.horses.length === 0) {
controller.update({ "horseUpdate": true, "horseEntity": entity }, raceEntity)
}
})
})
return raceEntity
}
function init(object) {
handler.data = object.data.PARaceCardObject ? object.data.PARaceCardObject : object.data.PABettingObject;
racePromises = _.map(handler.data.Meeting.Race, function(race) {
return Promise.all([ getMeeting(object.promise), controller.find({ x_reference: race.ID }) ])
.spread(function(meetingEntity, raceEntity) {
return doesRaceExist(meetingEntity, raceEntity, race)
})
.then(createHorseEntities)
.catch(errorHandler)
})
return racePromises
}
HorsePostHandler.js
的主要原因予分離的RacePostHandler和HorsePostHandler成單獨的模塊使用不同的控制器是由於它們。一個與Race模型交互,另一個與Horse模型交互。
function init(raceEntity, horseArray) {
promises = _.map(horseArray, function(horse) {
return controller.find({name: horse.Name})
.then(function(horseEntity){
return doesHorseExist(raceEntity, horseEntity, horse)
})
})
return promises
}
您不能在承諾中使用'_.each'。 – Bergi
我目前的代碼完全符合_.each。但是,我只是在做一些家務活,並且正在爲重組而苦苦掙扎。 horsePostHandler返回我需要迭代的滿足承諾數組。如果您有任何其他替代方案可以從履行承諾中獲得價值,請隨時解釋。 – CBainbridge
'each'的問題是'createHorseEntities'不會返回一個允許等待控制器完成所有更新的許諾。就像你在'init'中做的那樣,最好應用'map'並使用'Promise.all'。 – Bergi