add promise spread function