1. add stack frames to the error
2. change the return values to []PromiseResult, it is clearer than puting return type to latest item of the return slice