prevent multiple promise resolve/rejects