如何确定通过.bind()添加的参数顺序

时间:2015-11-09 10:37:10

标签: javascript promise bluebird

前言,我使用BlueBird重写从回调到Promises的代码(Bluebird很棒BTW),我正在尝试重构我的代码:

我有一个将在不同情况下使用的功能,这个:

var promote = function(request){
  var destination_build = request.params.destination_build;
  return sanitizeInput(request
    ).then(getPackagesWithIndex.bind(undefined, destination_build, 'destination_build')
    ).then(preparePackages
    ).mapSeries(updatePackage)
}

我正在链接这样的函数以获得所需的结果:

console.log

当我request结果时,参数的顺序似乎搞砸了: indexValue得到{{1}}的值,是否有办法保持秩序?

1 个答案:

答案 0 :(得分:0)

bind method的第一个参数(与Bluebird无关,顺便说一下)是函数调用的this值。虽然参数仍然有序。

因此,当您使用getPackagesWithIndex.bind(undefined, destination_build, 'destination_build')作为then回调时,最终将使用

调用getPackagesWithIndex
  • this
  • undefined上下文
  • request destination_build
  • indexName 'destination_build'
  • 和带有承诺结果的indexValue

如果这只是转移,请在前面添加null之类的内容;如果你想要一个altogher不同的顺序,你最好使用包含显式调用的函数表达式。