如何在then()中传递bluebirdcallback的参数?

我有一个回报的承诺。 在这一刻,我这样做:

Something( ... ) .then(()=>{console.log("Done.");}); 

这会更实际:

 Something( ... ) .then(console.log, "Done."); 

例如, setTimeout工作原理是这样的:

 setTimeout(console.log, 1000, "Done."); 

蓝鸟有任何方法吗? 我的目标是要有这个实际的select来减less承诺产生的已经很荒谬的代码量。

在这一刻,我这样做:

 Something(…).then(()=>{console.log("Done.");}); 

这是正确的方法。 箭头function已经缩短了很多。 请注意,您可以删除“ { ”…“ ;} ”部分。

这会更实际:

 Something(…).then(console.log, "Done."); 

不,不会的。 then第二个参数是onRejectedcallback,而不是一个string。 你不能这样做。

我的目标是减less承诺产生的已经很荒谬的代码量。

然后使用async / await语法和一个转译器。 这很简单

 await Something(…); console.log("Done"); 

蓝鸟有任何方法吗?

如果你不喜欢使用一个转译器,而是在一个ES6环境(如最近的Node.js),你可以使用生成器函数来模仿async / await Promise.coroutine

这个特性对setTimeout来说非常独特。 IE9及以下需要一个polyfill无论如何https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout

以下将是您的示例使用console.log的解决方法。 谨慎使用任何引用this函数的函数。 你可以使用bind来设置这个值,或者让它undefined 。 另外,由于该值被自动作为最后一个要bindparameter passing,它将在“完成”之后logging已parsing的承诺值。

 Something( ... ) .then(console.log.bind(undefined, "Done.")); 

@Bergi对你的问题给出了很好的答案。 只需要添加一下,如果你使用() => console.log("Done.")或者其他一些常规的callback函数,把它作为一个单独的函数:

 function afterSomething() { console.log("Done."); } Something( ... ) .then(afterSomething);