triggerThen(nameOrNames) {
    const names = eventNames(nameOrNames);
    const listeners = _.flatMap(names, (name) => this.listeners(name));
    const args = Array.from(arguments);

    return Promise.mapSeries(listeners, (listener) => listener.apply(this, args.slice(1)));
  }
A promise version of {@link Events#trigger}, returning a promise which
resolves with all return values from triggered event handlers. If any of the
event handlers throw an `Error` or return a rejected promise, the promise
will be rejected. Used internally on the {@link Model#event:creating "creating"},
{@link Model#event:updating "updating"}, {@link Model#event:saving "saving"}, and
{@link Model@event:destroying "destroying"} events, and can be helpful when needing
async event handlers (e.g. for validations).

@method Events#triggerThen
@param {string} name
  The event name or a whitespace-separated list of event names to be triggered.
@param {...mixed} [args] Arguments to be passed to any registered event handlers.
@returns {Promise}
  A promise resolving to the return values of any triggered handlers.