我必须执行一些json调用并对结果应用回调。在运行时之前,调用次数是未知的。因此,我使用$.when.apply
将一组承诺传递给when
。
jsonPromises = []
newContentActions = []
for model in models
jsonPromises.push contentCreator.create(model)
action = new ActionHandler model
newContentActions.push action
$.when.apply($, jsonPromises)
.then (args...) =>
_.each args, (result, idx) =>
return unless result[1] is 'success'
action = newContentActions[idx]
action result[0]
它或多或少地按预期工作。当有超过1个承诺时,then
的{{1}}处理程序将获得一个数组数组(例如。$.when
,如Chrome开发者控制台中所示)。然后,[[Object, "success", Object], [Object, "success", Object]]
可以将其正确解压缩到_.each
。
但是如果只有1个promise,我只会在result, idx
处理程序中获得一个数组。它让then
感到困惑。 _.each
解压缩单个数组并产生3个函数调用。我的应用程序失败了。
为了解决这个问题,我会额外检查承诺的数量。如果只有一个,我将不会使用each
:
$.when
这是实现这一结果的唯一方法吗?有没有办法删除
if jsonPromises.length is 1
jsonPromises[0].done (model) =>
action = newContentActions[0]
action model
else
$.when.apply($, jsonPromises)
.then (args...) =>
_.each args, (result, idx) =>
return unless result[1] is 'success'
action = newContentActions[idx]
action result[0]
检查?
答案 0 :(得分:0)
如果您发现jsonPromises.length
是1
$.when.apply($, jsonPromises)
.then (args...) =>
args = [args] if jsonPromises.length is 1
_.each args, (result, idx) =>
return unless result[1] is 'success'
action = newContentActions[idx]
action result[0]