我有一个回复承诺的电话。此刻,我这样做:
$http.post('api/values', ???)
这会更实际:
Something( ... )
.then(()=>{console.log("Done.");});
例如,Something( ... )
.then(console.log, "Done.");
就是这样:
setTimeout
Bluebird有什么方法吗?我的目标是使用实用选项来减少Promises生成的已经荒谬的代码量。
答案 0 :(得分:1)
此时此刻,我这样做了:
Something(…).then(()=>{console.log("Done.");});
这是正确的方法。箭头功能已经缩短了很多。请注意,您可以放弃" {
" ..." ;}
"部分。
这会更实际:
Something(…).then(console.log, "Done.");
不,不会。 then
的第二个参数是onRejected
回调,而不是字符串。你不能这样做。
我的目标是减少已经荒谬的代码量 承诺产生。
然后使用async
/ await
语法和转换器。它就像
await Something(…);
console.log("Done");
Bluebird有没有这方法呢?
如果您不想使用转换器但是在ES6环境中(如最近的Node.js),您可以使用生成器函数模仿async
/ await
{ {3}}
答案 1 :(得分:1)
该功能几乎与setTimeout
相同。无论如何,IE9及以下版本都要求使用polyfill https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout
以下是使用console.log
的示例案例的解决方法。使用引用this
的任何函数时要小心。您可以使用bind
设置this
的值或保留undefined
。此外,它将在" Done"之后记录承诺的已解决值。由于该值自动作为bind
的最后一个参数传递。
Something( ... )
.then(console.log.bind(undefined, "Done."));
答案 2 :(得分:0)
@Bergi对你的问题给出了很好的答案。只是添加,如果您使用() => console.log("Done.")
或其他一般回调,请将其作为一个单独的函数:
function afterSomething() {
console.log("Done.");
}
Something( ... )
.then(afterSomething);