将一个promise的返回值作为另一个promise的参数传递

时间:2014-10-15 14:53:10

标签: javascript promise bluebird

可能是一个非常简单的问题,但这里有:

我正在使用Bluebird promises,但我想将一个promise返回的值作为参数传递给另一个promise。我现在的代码是:

Promise.props
  reports: @app.Reports.getReports()
  years: @app.Years.getYears()
.then (promised) =>
  console.log promised

但我真的希望能够使用promised.years作为getReports的第一个参数,所以它会像reports: @app.Reports.getReports(promised.years)

我试图嵌套承诺,但它爆炸了。我尝试从报告定义中获得多年的承诺,但它爆炸了。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,嵌套是走到这里的方式 - 当然没有爆炸:

@app.Years.getYears()
.then (years) =>
    @app.Reports.getReports(years)
    .then (reports) ->
        console.log {years, reports}

您无法在promised.years来电中访问getReports,因为它不在范围内 - 它是您在之后传入的回调函数的参数>首先打电话给getReports

另一种写这种方法的方法是单独构建promises,并将它们与你使用的Promise.props连接在一起:

yearsPromise = @app.Years.getYears()
reportsPromise = yearsPromise.then(@app.Reports.getReports)
Promise.props
    years: yearsPromise,
    reports: reportsPromise
.then (promised) ->
    console.log promised

(注意你在对象文字中cannot refer to another property