【发布时间】:2015-11-04 06:15:11
【问题描述】:
假设我有以下设置(本例中的“方法”是一个过于简化的版本,我正在处理的真正方法内部有一个很长的承诺链):
P = require 'bluebird'
something = [ { id: 1, title: 'hello' }, { id: 2, title: 'world' } ]
method = (param) -> P.try -> param * 2
我正在尝试将“方法”的结果分配给 item.newId
P.each something, (item) ->
item.newId = method item.id
.then (result) ->
console.log result
结果不是我最初所期望的,但它完全有道理,因为方法返回一个承诺。
[ { id: 1,
title: 'hello',
newId:
{ _bitField: 268435456,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: 2 } },
{ id: 2,
title: 'world',
newId:
{ _bitField: 268435456,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: 4 } } ]
所以我将代码更改为如下所示:
P.each something, (item) ->
method(item.id).then (i) -> item.newId = i
.then (result) ->
console.log result
这会产生预期的结果:
[ { id: 1, title: 'hello', newId: 2 },
{ id: 2, title: 'world', newId: 4 } ]
我的问题是,在处理 promise 方法时,最终解决方案是否是处理此类赋值的正确方法。
【问题讨论】:
-
是的,这是一个完全可行的解决方案。你也可以
P.map
标签: javascript coffeescript promise bluebird