可能是一个非常简单的问题,但这里有:
我正在使用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)
我试图嵌套承诺,但它爆炸了。我尝试从报告定义中获得多年的承诺,但它爆炸了。
有什么想法吗?
谢谢!
答案 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)