code: function callAndCatchPromiseError(fn, ...args) {
    // args 最后一个参数如果是如果是 function 则表示 next()
    // 如果执行时出错，调用 next(err)
    const next = args[args.length - 1];
    let p = null;
    try {
      p = fn.apply(null, args);
    } catch (err) {
      return next(err);
    }
    if (p && p.then && p.catch) {
      p.catch(err => next(err));
    }
  }
docs: 调用 handler，并捕捉 Promise 的错误