The capture of lambda passed to createPromiseAsJSIValue should be by copy ([=]). You can't guarantee that those arguments will live until lambda completes. If you don't want to copy jsi::Array arguments (they might be big) then wrap them in std::shared_ptr<>.
Usually we shouldn't create new diff to fix mistakes in another diff. But in this case you had to fix other methods implemented outside of this stack as well so we can proceed with this approach.