我发现自己经常做以下事情。对此有更简洁或惯用的模式吗?
function my_func(some_fn) {
const promise = some_fn();
if (promise) {
promise.then(do_thing);
} else {
do_thing();
}
}
答案 0 :(得分:1)
async function my_func(some_fn) {
await some_fn();
do_thing();
}
......也许是试试看......
async function my_func(some_fn) {
try {
await some_fn();
} catch (err) { /* handle error */ }
do_thing();
}
答案 1 :(得分:1)
实际上,代码中唯一的问题特定方面是do_thing
函数。只需通过:
function generalized_hof(some_fn, callback) {
const promise = some_fn();
if (promise) {
promise.then(callback);
} else {
callback();
}
}
然后就像使用它一样:
generalized_hof(
/* Potentially promise generating function */,
/* Callback function */)
显然generalized_hof
是一个糟糕的名字。我不完全确定你所谓的这个功能。
答案 2 :(得分:0)
我会选择:
function my_func(some_fn) {
const promise = some_fn();
promise ? promise.then(do_thing) : do_thing();
}
如果有一个单行程,我会选择:
function my_func(some_fn) {
(some_fn = some_fn()) ? some_fn.then(do_thing) : do_thing();
}
第二个有点奇怪,因为为同一个变量分配不同的类型有点hackish,而习惯输入语言的人是一种失常,但是嘿,这是JavaScript美妙的东西之一,不是吗? (只要你知道你在做什么)
编辑:如果你重复这个确切的模式,@Carcigenicate answer是可行的方法。