Many functions cannot be easily persisted because they access variables of outside scopes (they are closures). A persistence mechanism would have to collect that context as well.
If the function may change this context, it won't be possible to persist the function+context in one process and restore it in another process, because the side effects of running the function would not be visible in the first process.
In your case, the solution is likely not to persist a function's context, but to encode the promises as events that can be explicitly stored: you can then retry to run some code until some output event is generated. Modelling something explicitly is often a sensible approach when the host language can't express some concept directly.