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

Passing return value of one promise as a parameter for another

本文关键字:返回值 参数 另一个 promise 一个      更新时间:2023-09-26

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

我使用的是Bluebird-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)

我试着嵌套承诺,但它爆炸了。我试着从报告定义中获得年份承诺,但它爆炸了。

有什么想法吗?

谢谢!

是的,嵌套是在这里进行的方式-当然不会爆炸:

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

您无法在getReports调用中访问promised.years,因为它不在作用域中-它是在首先调用getReports之后在中传递的回调函数的参数。

写这篇文章的另一种方法是分别构建promise,并将它们与您使用的Promise.props连接在一起:

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

(请注意,您不能在对象文字中引用另一个属性)