J'utilise Enum.reduce
L'augmentation de jour avec quelques miliseonds utilisant Enum.reduce Elixir
Enum.reduce(email_array, {[], [], []}, fn email, {shares, share_requests, changes} = _acc ->
end)
Je vais passer une méthode sur chaque réducteur comme
CameraActivity.log_activity(caller, camera, "shared", %{with: email, ip: requester_ip}, done_at)
En done_at, les valeurs par défaut sont Ecto.DateTime.utc
, Mais je veux augmenter cette date et l'heure sur chaque Enum.reduce.
J'ai essayé de déclarer le datetime au tout début de Enum.reduce comme done_at = Ecto.DateTime.utc
, Mais je n'ai aucune idée de comment je vais le boucler en Enum.reduce
, de sorte que je puisse augmenter quelques secondes en elle. Le but de ceci pour ne changer que le temps d'activité pour chaque itération. toute aide sera appréciée grâce
Mise à jour pour Dogbert
Enum.reduce(email_array, {[], [], []}, fn email, {shares, share_requests, changes} = _acc ->
with {:found_user, sharee} <- ensure_user(email)
do
case CameraShare.create_share(camera, sharee, caller, params["rights"], params["message"]) do
{:ok, camera_share} ->
unless caller == sharee do
send_email_notification(caller, camera, sharee.email, camera_share.message)
end
Camera.invalidate_user(sharee)
Camera.invalidate_camera(camera)
CameraActivity.log_activity(caller, camera, "shared", %{with: sharee.email, ip: requester_ip})
{[camera_share | shares], share_requests, changes}
{:error, changeset} ->
{shares, share_requests, [attach_email_to_message(changeset, email) | changes]}
end
else
{:not_found, email} ->
case CameraShareRequest.create_share_request(camera, email, caller, params["rights"], params["message"]) do
{:ok, camera_share_request} ->
send_email_notification(caller, camera, email, camera_share_request.message, camera_share_request.key)
CameraActivity.log_activity(caller, camera, "shared", %{with: email, ip: requester_ip})
Intercom.intercom_activity(Application.get_env(:evercam_media, :create_intercom_user), get_user_model(email), get_user_agent(conn), requester_ip, "Shared-Non-Registered")
{shares, [camera_share_request | share_requests], changes}
{:error, changeset} ->
{shares, share_requests, [attach_email_to_message(changeset, email) | changes]}
end
end
end)
Pourquoi ne pas stocker la valeur actuelle de 'done_at' dans l'accumulateur et ainsi augmenter dans chaque itération? – Dogbert
Je suis seulement inquiet au sujet des augmentations. comment faire ça? –
Vous ne savez pas non plus comment l'enregistrer dans l'accumulateur, l'accumulateur réel est également appris de vous dans la question précédente –