如何在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
第二个参数是onRejected
callback,而不是一个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
。 另外,由于该值被自动作为最后一个要bind
parameter passing,它将在“完成”之后logging已parsing的承诺值。
Something( ... ) .then(console.log.bind(undefined, "Done."));
@Bergi对你的问题给出了很好的答案。 只需要添加一下,如果你使用() => console.log("Done.")
或者其他一些常规的callback函数,把它作为一个单独的函数:
function afterSomething() { console.log("Done."); } Something( ... ) .then(afterSomething);