import Ember from 'ember'; const { RSVP, Mixin, Logger: { info }, run, get, set } = Ember; const pushAndLog = (route, msg) => { let c = get(route, "c"); let d = new Date(); get(c, "log" ).push(`${d} ${msg}`); info(msg); } let MyMixin = Mixin.create({ beforeModel() { this._super(...arguments); let c = this.controllerFor(this.routeName); set(this, "c", c); set(c, "log", Ember.A()); pushAndLog(this,'at mixin'); return timeoutPromise(3000) .then(() => {this.beforeModel2()}); } }); function timeoutPromise(milliseconds) { return new Promise(function(resolve,reject) { run.later(this, resolve, milliseconds); }); } export default Ember.Route.extend(MyMixin, { /* beforeModel() { }, */ beforeModel2() { pushAndLog(this,"at beforeModel2 of the index route"); }, model() { pushAndLog(this,"model"); return timeoutPromise(5000); }, afterModel() { pushAndLog( this, "afterModel"); return timeoutPromise(5000); } });