Дарт - Почему я должен ждать этого. - PullRequest
0 голосов
/ 28 января 2020
    Future<Either<Failure, User>> call(SignUpParams params) async {

    Either<Failure, User> failureOrUser;

    // Creates a User
    failureOrUser = await repository.signUpUser(
        params.email, params.password, params.type);

    // Creates a [Learner / Instructor] if User returned
    await failureOrUser.fold(
            (failure) => left(failure),
            (user) async {
              final remoteServerFailureOrSuccess =
                await createLearnerOrInstructor(CreateLOIParam(user: user));

              // check if [Learner / Instructor] creation has failed
              remoteServerFailureOrSuccess.fold(
                      (failure) => failureOrUser = left(failure),
                      (success) => null
              );

            }
    );

    return failureOrUser;
} 

Я не могу понять, почему мне нужно поместить await перед failureOrUser.fold(); методом.

Если я этого не сделаю, то метод (user) async {} не await

final remoteServerFailureOrSuccess = await createLearnerOrInstructor(CreateLOIParam(user: user));

и return failureOrUser; вызывается до вызова

remoteServerFailureOrSuccess.fold(
  (failure) => failureOrUser = left(failure),
  (success) => null
);

.

Я получаю 'ожидание применяется до' Object ', который не является Future', подсказка об ошибке, но код ожидает только, пока весь метод не будет завершен, прежде чем возвращаться, что делается таким образом.

Я пытался поместить

await remoteServerFailureOrSuccess.fold(
 (failure) => failureOrUser = left(failure),
 (success) => null
);

но это все еще не работает.

Так что мне кажется, что

final remoteServerFailureOrSuccess = await createLearnerOrInstructor(CreateLOIParam(user: user));

на самом деле не ждет.

1 Ответ

0 голосов
/ 28 января 2020

Хорошо, я думаю, что понял это, потому что я установил (user) async {}, что сделало сгиб Будущим, но другая половина не была асин c (failure) => left(failure), поэтому я предполагаю, что получаю ошибка из-за этого.

Как только я установил ошибку, чтобы быть асин c ошибка исчезла. (failure) async => left(failure)

Немного глупый вопрос, но я оставлю его, если кто-нибудь получит такую ​​же ошибку.

...