писать на тс, используя result тип аля раст. чтобы вместо:
async function request(postId: PostId): Promise<Result<string, ParserRequestError>> {
const myfetch = new MyFetch();
const tokensResult = await fetchHomepageToken(myfetch);
if (tokensResult.isErr()) {
return tokensResult;
}
return fetchPost(tokensResult.unwrap(), postId, myfetch);
}
стало:
async function request(postId: PostId): Promise<Result<string, ParserRequestError>> {
const myfetch = new MyFetch();
return AsyncResult.begin()
.andThenAsync(() => fetchHomepageToken(myfetch))
.andThenAsync((data) => fetchPost(data, postId, myfetch))
.toPromise();
}
andThenAsync обрабатывают только Ok результаты, передавая Err дальше по цепочке. поэтому не нужны проверки .isErr()
Так промисы это и есть эти самые Railway. Причем в точности.
жаль в промисах throw используется
Это не правда, кстати. Построив промис конструктором, возьмите и вызовите reject
Во такие
Обсуждают сегодня