代码之家  ›  专栏  ›  技术社区  ›  Reza

如何在nestjs应用程序中使用矩

  •  0
  • Reza  · 技术社区  · 4 年前

    所以我在我的模块中提供了如下的momentj

    providers: [
        {
          provide: 'MomentWrapper',
          useFactory: async () => moment(),
          scope: Scope.REQUEST,
        },
      ],
    

    为我服务

        constructor(
            @Inject('MomentWrapper') private momentWrapper: moment.Moment
        )
    

    那我就有这样的方法

        private calculateNextRun(every: number, period: SchedulePeriod): string {
            const currentDate = this.momentWrapper.tz('America/Toronto');
            let nextDate = null;
    
            nextDate = currentDate.add(every, period);
            console.log(currentDate.format(), nextDate.format(), every, period, );
    
            return nextDate.toISOString();
        }
    
    

    此方法将在循环中调用,并应获取当前日期并添加一些天/周/。。把它还给它。

    问题是它保留了旧值,所以每次进入方法时都不是从当前日期开始的

    控制台输出

    2020-01-25T16:39:19-05:00 2020-01-25T16:39:19-05:00 6 d
    2020-02-15T16:39:19-05:00 2020-02-15T16:39:19-05:00 3 w
    2020-02-16T16:39:19-05:00 2020-02-16T16:39:19-05:00 1 d
    

    如果你看到第一次约会 currentDate 不断变化

    有没有办法克服这个问题, 没有 创建这样的新服务

    import * as moment from 'moment-timezone';
    @Injectable()
    export class MomentService {
        moment(): moment.Moment {
            return moment();
        }
    }
    
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   Kim Kern    4 年前

    您应该为每个函数调用创建一个新的moment实例,而不是重用提供者singleton的同一个实例。所以提供 moment moment() :

    providers: [
        {
          provide: 'MomentWrapper',
          useValue: moment
        },
      ],