承诺被抛弃会发生什么?

Ian*_*ton 6 asynchronous ios swift promisekit

我在视图控制器中定义了以下代码.

    _ = accountService.getAccount()

      .then { user -> Void in

         self.txtBxUser.text = user.username
         self.txtBxEmail.text = user.email
   }
Run Code Online (Sandbox Code Playgroud)

getAccount 发出REST API请求.

如果用户在呼叫返回之前解除了视图控制器,那么回叫链会发生什么?它是否仍在运行,我认为,它仍然被引用?

Rob*_*Rob 2

如果用户在调用返回之前关闭视图控制器,回调链会发生什么?鉴于我认为它仍然被引用,它是否仍然运行?

是的,它仍然运行。

预先警告,闭包中的引用self意味着它还保留对视图控制器的引用,直到该then闭包完成运行。因此,如果视图控制器有可能被关闭,您可能需要使用引用weak

_ = accountService.getAccount().then { [weak self] user -> Void in
    self?.txtBxUser.text = user.username
    self?.txtBxEmail.text = user.email
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,您还应该getAccount在视图控制器的deinit.

(请注意,在FAQ - Should I be Concerned About Retain Cycles中,PromiseKit 文档指出您不需要weak引用,这是正确的。这只是一个您是否介意解除分配的视图控制器的问题推迟到履行承诺后。)