A ES6 promise implement