Is FutureOr <T> a type of reided future <T> / <T>?

I have a class in AngularDart as shown below:

abstract class Validator {
  Map validate(AbstractControl c);
}

Having looked carefully, this was earlier (before we added support for the strong mode):

abstract class Validator {
  validate(AbstractControl c);
}

The problem is that it technically supports the return of the Future or the Map.

I would like to reorganize this and print it correctly with FutureOr:

abstract class Validator {
  FutureOr<T> validate(AbstractControl c);
}

Can I use validation isat runtime? (In DDC and dart2js)

void runValidator(Validator v) {
  var result = v.validate(...);
  if (result is Future) {
    // async...
  } else {
    // sync...
  }
}

I think about it right?

EDIT : As mentioned below, I mean

if (result is Future<T>) {

} else if (result is T) {

}

One more question: validatecorresponds to these two typedefs:

Future<Map> AsyncValidate(AbstractControl c);

Map SyncValidate(AbstractControl c);
+4
source share
1 answer

, result is Future<Map>. , validate, Future, . , FutureOr<Map> , , "FutureOr". Future<Map>, a Map.

, "". , Map, FutureMap:

abstract class Validator {
  FutureOr<Map> validate(abstractControl c);
}
class AsyncValidator extends Validator { 
  Future<Map> validate(AbstractControl c) {...}   
}
class SyncValidator extends Validator { 
  Map validate(AbstractControl c) {...} 
}

, Validator.validate, .

typedef FutureOr<Map> Validate(AbstractControl c);
typedef Future<Map> AsyncValidate(AbstractControl c);
typedef Map SyncValidate(AbstractControl c);
Validator v = ...;
Validate f0 = v.validate;  // Safe.
AsyncValidate f1 = v.validate; // BAD assignment.
SyncValidate f2 = v.validate; // BAD assignment.

Map syncValidate(AbstractControl c) { ... }
Future<Map> asyncValidate(AbstractControl c) { ... }
v = syncValidate;  // Good assignment.
v = asyncValidate;  // Good assignment.    

validate v, , f1 f2, , , .

, FutureOr. a Future Future . FutureOr, , , .

+2

Source: https://habr.com/ru/post/1669072/


All Articles