私が書いたコードの読みやすさを単純化するのにはいくつかの難しさがありますが、これまではコードを2つの主な機能に分けていましたが、 。()の。私はこれらの2つの関数を書く簡単な方法があるかどうかはわかりません。正しい方向の構造とポインタに関するアドバイスは本当に感謝しています。ネストされた.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を分離する主な理由は、異なるコントローラを使用してそれらのためでした。 1つはレースモデルと、もう1つはホースモデルと相互作用します。
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は、繰り返し処理するのに必要な、実現した約束事の配列を返します。 fufilledの約束の配列から値を取得する他の選択肢がある場合は、自由に説明してください。 – CBainbridge
'each'の問題は、' createHorseEntities'が、コントローラがすべての更新を完了するまで待つことを約束するものを返さないということです。 'init'のように' map'を適用し、 'Promise.all'を使用します。 – Bergi