EDITING: always return a promise from fetch