javascript does async function always return promise