promise: move logic to eval.