add timeout feature to promise, future just resend it