Javascript 承诺的延迟约束

Javascript 承诺的延迟约束,javascript,promise,bind,late-binding,Javascript,Promise,Bind,Late Binding,我试图弄清楚如何对promise函数参数进行后期绑定。在大多数情况下,我希望promise flow只是一系列函数名,因此它看起来像一系列步骤(除非它是下面这样的一行程序) 这里有一个例子。函数正在等待一个日期,因为它是后期绑定的输入,而该输入将来自它之前承诺链中的某个步骤 let aGreatFunctionNeedingADateInput = greatFunction.bind(undefined, x, y); somePromise().then(functionThatMightC

我试图弄清楚如何对promise函数参数进行后期绑定。在大多数情况下,我希望promise flow只是一系列函数名,因此它看起来像一系列步骤(除非它是下面这样的一行程序)

这里有一个例子。函数正在等待一个日期,因为它是后期绑定的输入,而该输入将来自它之前承诺链中的某个步骤

let aGreatFunctionNeedingADateInput = greatFunction.bind(undefined, x, y);
somePromise().then(functionThatMightChangeDate)
             .then( (adjustedDate) => {
                    aGreatFunctionNeedingADateInput.bind(undefined,adjustedDate)
             })                        
             .then(aGreatFunctionNeedingADateInput)
我知道这里有很多奇怪的和潜在的错误的作用域,但本质上我想把promise函数的最后一个参数绑定为最后一步,以防它在过程中发生变化。如果可能的话,请告诉我

更新:

在此链接中找到此示例:

获得了类似的结果,除了它在创建时与一个固定值(某个身份不明的人)绑定,而不是像我试图做的那样在允诺链的中间绑定。类似的想法,但我可能可以适应我的使用

var createdBy = function(user, items) {
    return items.filter(function(item) {
        return item.createdBy == user
    });
};

m.request({method: "GET", url: "/api/projects"})
    .then(pastItems) // filter past projects
    .then(createdBy.bind(this, "John Doe")) // filter projects created by john doe
    .then(log) // log past projects created by john doe

你想得太多了

“后期绑定”是我们通常所说的“传递”,因此不绑定

.then((adjustedDate) => aGreatFunctionNeedingADateInput(adjustedDate))


您使用
bind
而不只是向函数传递参数有什么原因吗?对于您的用例,我有点困惑您试图实现什么,在我看来,您只需要在
中调用
aGreatFunctionNeedingADateInput
(..
block,而不是上面。我不太清楚您想做什么,但这里有一大堆选项,可以让承诺链中的后续函数访问一些早期结果:。如果您希望值能够更改,显然不能
.bind()
提前更改值。您可以
.bind()
一个对象引用,并将数据作为该对象上的一个属性,该属性可以在此过程中更改。但是,解决此问题的通常方法是在共享范围内使用局部变量。你们都提出了好的观点。@jfriend00查看示例(将中间结果分配给更高的范围),我不明白为什么我的方法不起作用。该变量应该在作用域中。但是,根据
then.
子句的绑定时间,它们可能使用了一些过时的值。我想由于promises的异步性质,js引擎可能会初始化所有函数/闭包,到达代码底部,然后启动ac实际执行承诺链?这就可以解释了。我知道我所做的是过度的/复杂的,我刚刚看了一些函数编程示例,在这些示例中,他们正在使用函数,直到最后一刻才绑定关键参数,然后对其进行评估。我试图了解这种概念是如何实现的在这里应用。事实上,我刚刚发现了一个类似的例子,说明我正在尝试做的事情,我并不像我想的那么疯狂!
.then((adjustedDate) => aGreatFunctionNeedingADateInput(adjustedDate))
.then(aGreatFunctionNeedingADateInput)