add a promise based asset loader