findNumbers
으로 전화하는 것이 순차적으로 이루어지기 만하면됩니다. 맞습니까? 약속을 맺으면됩니다.
중요 : [] .forEach가 아닌 명령형 루프를 사용하고 있으므로 groupID
및 groupObject
개의 변수를 범위 지정해야합니다.
globalPromise = null
createScopedPromiseFn = (groupID, groupObject) =>
return ->
@callcounter.findNumbers(groupID).then (result) =>
@cache.groups[groupID].someValue = result.someValue
for groupID, groupObj of @cache.groups
createPromise = createScopedPromiseFn groupID, groupObj
# The if here is for initialisation
globalPromise = if globalPromise then globalPromise.then createPromise() else createPromise()
globalPromise.then ->
# Here you have finished
이 코드에서 for
루프는 제한없이 반복되지만 약속은 실제로 순차적으로 해결됩니다.
그러나, 나는 대신 reduce
와 기능적 접근을하는 것이 좋습니다 것입니다 :
createScopedPromise = (groupIndex, group) =>
@callcounter.findNumbers(groupIndex).then (result) =>
@cache.groups[groupIndex].someValue = result.someValue
globalPromise = @cache.groups.reduce (promise, group, index) ->
if promise
return promise.then ->
createScopedPromise index, group
else # First promise
return createScopedPromise index, group
globalPromise.then ->
# Here you have finished
질문을 downvoted 된 이유를 물어 될까요? – Atmocreations