【问题标题】:Promises: Passing new Parameters to item in Chain Sequence承诺:将新参数传递给链序列中的项目
【发布时间】:2017-12-03 15:37:52
【问题描述】:

我正在使用q library for promises。我正在尝试将多个按顺序返回承诺的函数链接在一起,但我想传入新参数。

例如我想做这个伪代码:

var func1Param = 'abc';
var func2Param = 'def';
var func3Param = 'ghi';

func1(func1Param).then(func2(func2Param)).then(func3(func3Param));

到目前为止,为了处理这个问题,我一直在做类似以下的事情,然后让第一个函数拥有所有参数,并通过解析将它们传递给第二个函数,依此类推。 例如

var parms = { func1 : 'abc', func2: 'def', func3: 'ghi' }
func1(params).then(func2).then(func3);

但是,将参数传递给不需要它们的函数以将这些参数传递给确实需要它们的函数似乎很草率。

最好的方法是什么?我提出的每个选项要么不起作用,要么看起来有点疯狂。必须有一个简单的方法来正确地做到这一点。

【问题讨论】:

  • 你能给出每个函数的定义吗?执行此操作的“最佳”方法实际上取决于您尝试对参数执行的操作。
  • 第一种方式有什么问题?

标签: javascript promise q


【解决方案1】:

我不确定我是否理解正确,但如果您想将默认/预先指定的变量添加到 (Promise) 回调中,您可以使用 Function.bind(thisArg[, arg1[, arg2[, ...]]])

例如

function1(foo)
    .then(function2.bind(this, bar)
    .then(function3.bind(this, baz)

【讨论】:

  • 这就是我的想法。我希望有一种标准的方法来绑定参数而不用指定上下文。
  • 这看起来很有希望 ;-)。我正在测试它,谢谢!
  • 谢谢!这很好用,正是我想要的。这使一切变得更简单。看起来我什至可以根据需要提取最后一个链式承诺的结果(它在最后一个参数中加载)。
  • 是的,使用 bind 将提供提供的参数作为调用函数的第一个参数,其他所有内容仍然传递到最后。
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 2015-10-10
  • 2017-11-28
相关资源
最近更新 更多