gpt4 book ai didi

javascript - 嵌套 .then() 的 Promise

转载 作者:行者123 更新时间:2023-12-01 03:40:33 26 4
gpt4 key购买 nike

我在简化我编写的代码的可读性方面遇到了一些困难,到目前为止,我已经设法将代码分成两个主要函数,但是我仍然受到嵌套的 .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 分成单独的模块的主要原因是它们使用不同的 Controller 。一个与 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
}

最佳答案

如果你正在编写nodejs 7,你可以从 --harmony-async-await 开始标志。

这允许新的异步/等待功能更具可读性:

async function run() {
try {
let result1 = await myFirstPromise
let moreResults = await Promise.all([mySecondPromise, myThirdPromise)
let finalResult = await lastPromise
finalResult = doSomethingWith(finalResult)
return finalResult
} catch(err) {
console.warn(err)
}
}

run()

在您的示例中,使用最新的 javascript(我认为是 ES7)将是:

 async function createHorseEntities( raceEntity ) {
for (let entity of (await horsePostHandler.init(raceEntity, race.Horse))) {
if ( raceEntity.horses.length === 0 ) {
controller.update({ "horseUpdate": true, "horseEntity": entity} , raceEntity)
}
}
return raceEntity;
}

关于javascript - 嵌套 .then() 的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43911671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com