Ayrat
а я старый страшный хачик
Hog
https://www.bbc.com/russian/news-50549100
Nikolay
КОД! КОД! КОД! КОД!
Шото типа такого
Nikolay
Смысл ясен думаю
Ayrat
Шото типа такого
бля, ну скинь текстом
Nikolay
let tryUploadFileAsync fileType = async { match fileType with | "image" -> return Some 1L |> Result.Ok // 1L is file id | "uploading_not_required" -> return None |> Result.Ok | _ -> return Result.Error (sprintf "%s uploading is not supported" fileType) } let files = [] let uploadedFiles = System.Collections.Generic.List<int64>(files.Length) for file in files do let! uploadResult = tryUploadFileAsync file match uploadResult with | Result.Ok (Some r) -> uploadedFiles.Add(r) | Result.Ok None -> uploadedFiles.Add(-1L) | Result.Error e -> return e |> Result.Error m.UploadedFiles <- uploadedFiles return serialize m |> Result.Ok
Диёр
в дискорде кстати вроде есть подсветка кода
Диёр
ждём в телеге
Диёр
который год, но ждём
Крылатый
Ещё бы дискорд столько проца не ел...
Nikolay
который год, но ждём
По сути там ничего не мешает это реализовать
Hog
files |> Seq.map tryUploadAsync |> AsyncSeq.ofSeq |> AsyncSeq.mapAsync ...
Nikolay
Вопрос скорее как сделать, шобы красиво было, на разных клиентах, с разными схемами
Hog
ну, ты понял идею
Nikolay
так чо мешает Result.Ok возвращать?
А потому, что нужно сначала всё проитерировать
Nikolay
И только после того вернуть Ok
Ayrat
ИЗИ
Hog
ПИЗИ
Ayrat
ЛИТЛ БРИЗИ
Nikolay
Давай пиво подержу
Крылатый
ЛЕМОН СКВИЗИ
Ayrat
Тут я понял что делаю то же самое что @grishace предложил
Ayrat
но с фолдом
Ayrat
потому что тут нужен фолд
Hog
ну, да - потом партишон по резалту
Ayrat
ненененене
Ayrat
так ты продолжишь выполнять асинки после неудачи
Ayrat
а надо сразу кончить
Ayrat
и закурить
Hog
ну ок. с фолдом - я там тоже предлагал :)
Hog
я ОЧЕНЬ люблю асинксекс
Hog
сначала их всегда пробую вкрячить :)
Vladimir
интересно что он на тасках построен)
Hog
Vladimir
согласен, лишь бы работало)
Ayrat
но почему хороший?
Потому что мне понравился
Roman
ну в смысле чем он хорош?
Hog
вот :) пруф!
Hog
зафолдишь потом :)
Hog
прикольно
Roman
Мне диалоги не зашли, игра актеров так себе, саундтрек не особо подходит для такого сеттинга и тп
Hog
а не как в Странжер Сингс 3 - русские учёные в бункере посерди америки
Roman
фентези
ну фентези ж не гарант успеха
Roman
короч я хотел, чтоб мне понравилось, но не смог
Roman
теперь пытаюсь понять, за что он нравится другим
Диёр
теперь пытаюсь понять, за что он нравится другим
ну там парочка хороших экшонов была и в целом соответствует первым рассказам
Диёр
а они на фанфик были похожи
Ayrat
let tryUploadFileAsync fileType = async { match fileType with | "image" -> return Some 1L |> Result.Ok // 1L is file id | "uploading_not_required" -> return None |> Result.Ok | _ -> return Result.Error (sprintf "%s uploading is not supported" fileType) } let files = [] let uploadedFiles = System.Collections.Generic.List<int64>(files.Length) for file in files do let! uploadResult = tryUploadFileAsync file match uploadResult with | Result.Ok (Some r) -> uploadedFiles.Add(r) | Result.Ok None -> uploadedFiles.Add(-1L) | Result.Error e -> return e |> Result.Error m.UploadedFiles <- uploadedFiles return serialize m |> Result.Ok
let tryUploadFileAsync fileType = async { match fileType with | "image" -> return Some 1L |> Result.Ok // 1L is file id | "uploading_not_required" -> return None |> Result.Ok | _ -> return Result.Error (sprintf "%s uploading is not supported" fileType) } let files = [] let maybeAsyncUploadedFiles: Async<Result<ResizeArray<int64>, string>> = AsyncSeq.ofSeq files |> AsyncSeq.mapAsync tryUploadFileAsync |> AsyncSeq.fold(fun maybeList file -> maybeList |> Result.bind (fun (list: ResizeArray<_>) -> match file with | Result.Ok (Some r) -> list.Add r ; Result.Ok list | Result.Ok None -> list.Add -1L; Result.Ok list | Result.Error e -> Result.Error e) ) (Result.Ok(ResizeArray()))
Диёр
да
Ayrat
🥴
шо не так???
Ilya
Сложна
Hog
вот именно
Hog
Сложна
это только кажется
Nikolay
шо не так???
Всё так
Nikolay
Ток наркомански немного
Ayrat
ну вообще нормально. Результат асинхронный? асинхронный. Внутри возможно есть результат, возможно нет, это тоже ожидаемо, т.к. возможно нихуя не получилось
Ilya
это только кажется
Может быть. Но мне сложно🤷‍♂️
Nikolay
Nikolay
Готовлюсь вникать в код
Ayrat
Кстати, мой код наверное не такой как у тебя
Ayrat
у тебя добавлялось в лист до первого Erorr
Ayrat
и далее что получилось, присваивалось в какое-то проперти
Ayrat
у меня не так, но можно сделать как у тебя
Nikolay
Да я понял, пойдёт и так
Nikolay
Я так для примера сделал, чтобы было понятно, что результат нужен потом
Ayrat
Да я понял, пойдёт и так
let uploadedFilesAsync: Async<ResizeArray<int64>> = AsyncSeq.ofSeq files |> AsyncSeq.mapAsync tryUploadFileAsync |> AsyncSeq.fold(fun (list: ResizeArray<_>) file -> match file with | Result.Ok (Some r) -> list.Add r | Result.Ok None -> list.Add -1L | Result.Error e -> () list) (ResizeArray())
Ayrat
Не, все равно не то.
Ayrat
Ща
Hog
не - там надо на выходе получить резалт
Hog
лист ид или еггор
Nikolay
Я тут придумал даже как упросить, Some и None теперь не надо