promise based queue