Javascript 如何使用Bluebird Promises以延迟的方式迭代元素?
到目前为止,我的代码是:Javascript 如何使用Bluebird Promises以延迟的方式迭代元素?,javascript,promise,bluebird,Javascript,Promise,Bluebird,到目前为止,我的代码是: Promise.map startEndTimes, (startEndTime) -> Promise.delay 10000 .then -> oandaClient.getCandlesAsync "#{dbInstrument.base}_#{dbInstrument.quote}", startEndTime.startTime, startEndTime.endTime, 'S5' .then (candles
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.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
如果要按顺序运行承诺,可以使用
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
延迟是并行运行的,因为
Promise.map
立即调用所有元素的回调,然后等待所有承诺
您似乎在寻找map
函数的作用,该函数允许您限制同时挂起的承诺数量。传递1
将使其按顺序处理数组:
Promise.map startEndTimes, (startEndTime) ->
oandaClient.getCandlesAsync "#{dbInstrument.base}_#{dbInstrument.quote}", startEndTime.startTime, startEndTime.endTime, 'S5'
, concurrency: 1
.then (candles) ->
console.log candles
延迟是并行运行的,因为
Promise.map
立即调用所有元素的回调,然后等待所有承诺
您似乎在寻找map
函数的作用,该函数允许您限制同时挂起的承诺数量。传递1
将使其按顺序处理数组:
Promise.map startEndTimes, (startEndTime) ->
oandaClient.getCandlesAsync "#{dbInstrument.base}_#{dbInstrument.quote}", startEndTime.startTime, startEndTime.endTime, 'S5'
, concurrency: 1
.then (candles) ->
console.log candles
蓝鸟什么都有,不是吗+1对于很多事情,是的:-)我见过一些不那么容易管理的事情,但它们非常罕见。蓝鸟的每件事都有它的特点,不是吗+1对于许多事情,是的:-)我见过一些事情不那么容易管理,但它们非常罕见。