then<R> 抽象方法
在当前 Future 完成时注册需要调用的回调函数。
当这个 Future 使用一个值完成时,onValue
回调函数会使用这个值被调用。如果这个 Future 已经完成,回调函数不会立即调用,而是会被安排在一个后续的微任务中。
如果提供了 onError
,且这个 Future 因为错误而完成,那么会调用 onError
回调函数,并传递错误及其堆栈跟踪。如果 onError
接受两个参数,它会同时调用错误和堆栈跟踪,否则只调用错误对象。onError
回调函数必须返回一个值或可以用来完成返回 Future 的 future,因此它必须是可赋值给 FutureOr<R>
的。
返回一个新的
如果调用的回调抛出异常,返回的 future 会用抛出的错误及其堆栈跟踪完成。在 如果回调返回一个 Future,那么 如果没有提供 在大多数情况下,独立使用 catchError(可选带有 请注意,futures 不会延迟错误报告直到添加了监听器。如果在 future 使用错误完成之后发生了第一个 onError
的情况下,如果抛出的异常与 onError
参数中的错误相同,并且是同步抛出的,那么这个抛出被认为是重新抛出,并使用原始的堆栈跟踪。为了在异步回调中使用相同的堆栈跟踪重新抛出,请使用 Error.throwWithStackTrace。then
返回的 future 会与回调返回的 future 使用相同的结果完成。onError
,并且这个 Future 传入了一个错误,那么错误会被直接转发到返回的 future。test
参数),而不是在一个 then 调用中处理值和错误,会更加易读。then
或 catchError
调用,那么误差会被报告为未处理的错误。请参阅 Future 的描述。
实现
Future<R> then<R>(FutureOr<R> onValue(T value), {Function? onError});