【问题标题】:Assignment of results from methods using promises使用 Promise 分配方法的结果
【发布时间】: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


【解决方案1】:

是的,这很好。但是,这不是唯一的方法,您不妨这样做

P.map something, (item) ->
  item.newId = method(item.id);
  P.props item
.then (result) ->
  console.log result

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2012-08-29
    • 2018-10-14
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多