首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从bluebird Promise.each()中调用异步函数

从bluebird Promise.each()中调用异步函数
EN

Stack Overflow用户
提问于 2019-05-13 05:58:32
回答 1查看 147关注 0票数 0

我有一个异步函数

代码语言:javascript
复制
async hoursTillNextService(aircraft_id, serviceType) {
    var service = await AircraftService.query().where('service_type', serviceType).where('aircraft_id', aircraft_id).orderBy('service_date', 'desc').first()
    if (!service) {
      return null
    }
    var lastDate = service.service_date
    var logs = await Flyinghour.query().where('aircraft_id', aircraft_id).where('flight_start', '>', moment(lastDate).format("YYYY-MM-DD HH:mm:ss")).sum('engine_minutes as totalMinutes')
    return parseInt(((serviceType * 60) - logs[0].totalMinutes) / 60)
  }

并且我需要在bluebird.each()循环中多次从with调用该函数

代码语言:javascript
复制
async serviceFlyingHoursProfile({ params, view }) {
    var aircraft = await Aircraft.query().where('id', params.id).with('serviceIntervals').first()
    // console.log(aircraft.serviceIntervals())
    var intervals = await aircraft.serviceIntervals().fetch()

    var serviceHourProfile = []
    await Promise.each(intervals.rows, async (interval) => {

      this.hoursTillNextService(aircraft.id, interval.hours).then((hours) => {
        console.log(hours)
        serviceHourProfile.push(hours)
        return
      })
    })
    console.log(serviceHourProfile)
}

结果是

代码语言:javascript
复制
[]
188
99

如您所见,在Proimise.each()完成之前调用了最后一条console.log语句,因此我的数组是空的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 06:13:53

你需要await this.hoursTillNextService

代码语言:javascript
复制
async serviceFlyingHoursProfile({ params, view }) {
    var aircraft = await Aircraft.query().where('id', params.id).with('serviceIntervals').first()
    // console.log(aircraft.serviceIntervals())
    var intervals = await aircraft.serviceIntervals().fetch()

    var serviceHourProfile = []
    await Promise.each(intervals.rows, async (interval) => {

      await this.hoursTillNextService(aircraft.id, interval.hours).then((hours) => {
        console.log(hours)
        serviceHourProfile.push(hours)
        return
      })
    })
    console.log(serviceHourProfile)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56103791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档