then

abstract fun <R> then(handler: (CoroutineScope, T) -> Deferred<R>): Deferred<R>

注册一个转换函数,该函数接收当前 Deferred 的成功结果,并返回 另一个 Deferred。 新返回的 Deferred 将代表整个链的下一个状态。

这相当于函数式编程中的 flatMap。它用于将一个异步操作的结果作为输入,启动下一个异步操作。 框架会自动“解包”内部的 Deferred,你不需要手动等待。

示例(先获取用户,再根据用户ID获取帖子):

val postsDeferred = coroutines.newScope().async { fetchUser(1) } //  Deferred<User>
.then { scope, user ->
// 'user' 是上一步的结果
// 返回一个新的 Deferred
scope.async { fetchPostsForUser(user.id) } // Deferred<List<Post>>
} // a new Deferred<List<Post>> is returned

postsDeferred.then { scope, posts -> ... }

Return

一个新的 Deferred<R>,其结果是 handler 返回的 Deferred 的最终结果。

Parameters

R

新 Deferred 的结果类型。

handler

一个函数,接收一个 CoroutineScope 和当前 Deferred 的结果 T,并返回一个新的 Deferred<R>