我们说我有以下设置('方法'在这个例子中是一个过度简化的版本,我正在处理的真实方法里面有一个很长的承诺链) :
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方法时,最终解决方案是否是处理此类赋值的正确方法。
答案 0 :(得分:0)
是的,这很好。然而,它不是唯一的方法,你可能会这样做
P.map something, (item) ->
item.newId = method(item.id);
P.props item
.then (result) ->
console.log result