到目前为止,我的代码是:

  Promise.map startEndTimes, (startEndTime) ->
    Promise.delay 10000
    .then ->
      oandaClient.getCandlesAsync "#{dbInstrument.base}_#{dbInstrument.quote}", startEndTime.startTime, startEndTime.endTime, 'S5'
  .then (candles) ->
    console.log candles


这不是真的工作。我有startEndTimes作为数组。我想为每个人从Oanda获取数据,然后处理这些数据。我不想立即开始所有通话,而是让它们按顺序进行。这可能吗?如果是这样,我该怎么办?

最佳答案

如果要按顺序运行promise,可以使用Promise.reduce()

Promise.reduce startEndTimes, (total, startEndTime) ->
    oandaClient getCandlesAsync(
        "#{dbInstrument.base}_#{dbInstrument.quote}"
        startEndTime.startTime
        startEndTime.endTime
        'S5'
    ).then (candles) ->
        console.log candles
        total.concat candles
, []
.then (allCandles) ->
    # use allCandles


如果要在按顺序运行每个呼叫之前延迟一些时间,也可以这样做:

Promise.reduce startEndTimes, (total, startEndTime) ->
    Promise.delay 10000
    .then () ->
        oandaClient getCandlesAsync(
            "#{dbInstrument.base}_#{dbInstrument.quote}"
            startEndTime.startTime
            startEndTime.endTime
            'S5'
        )
    .then (candles) ->
        console.log candles
        total.concat candles
, []
.then (allCandles) ->
    # use allCandles

10-05 20:53