我有一个名为photos
的数组,它在Promise中返回:
somePromiseFunc.then (resp) ->
photos = _.filter resp, 'invalid'
photos
.map (photo) ->
request
url: photo.url
method: 'GET'
.each (photo_contents) ->
# HERE I NEED THE ORIGINAL photo and the photo_contents
如何在回复中将photo
和photo_contents
放在一起?这样的事情有可能吗?
答案 0 :(得分:3)
您可以使用Promise.all
:
somePromiseFunc.then (resp) ->
photos = _.filter resp, 'invalid'
photos
.map (photo) ->
Promise.all [
photo
request
url: photo.url
method: 'GET'
]
.each ([photo, contents]) ->
由于您正在使用蓝鸟,如果您希望在对象而不是数组中传递值,您也可以使用Promise.props
,但在这种特殊情况下真正做的就是添加一些额外的详细程度:
somePromiseFunc.then (resp) ->
photos = _.filter resp, 'invalid'
photos
.map (photo) ->
Promise.props
photo: photo
contents: request
url: photo.url
method: 'GET'
.each ({photo, contents}) ->
答案 1 :(得分:1)
最简单的方法是将它们合并到map
回调中:
somePromiseFunc().then (resp) ->
_.filter resp, 'invalid'
.map (photo) ->
request
url: photo.url
method: 'GET'
.then (photo_content) ->
[photo, photo_content]
.each ([photo, content]) ->
# …
当然你也可以使用一个对象代替一个数组作为元组。
替代方案是access the previous promise result somehow,然后zip阵列在一起:
photos = somePromiseFunc().then (resp) ->
_.filter resp, 'invalid'
contents = photos.map (photo) ->
request
url: photo.url
method: 'GET'
Promise.all [photos, contents]
.then ([photos, contents]) ->
Promise.each (_.zip photos, contents), ([photo, content]) ->
# …