什么是支持ES6中可选异步回调的理想模式?

时间:2017-10-15 17:02:59

标签: javascript asynchronous promise

我发现自己经常做以下事情。对此有更简洁或惯用的模式吗?

function my_func(some_fn) {
  const promise = some_fn();

  if (promise) {
    promise.then(do_thing);
  } else {
    do_thing();
  }
}

3 个答案:

答案 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是可行的方法。