modify isPromise, support a pseudo-promise