[Swift] Asynchrone Verarbeitung mit PromiseKit

schreiben

Asynchrone Verarbeitung mit Promise

Entwicklungsumgebung

PCMacBook Air(13-inch,2017)
PC OSmacOS Catalina(ver 10.15.6)
IDEXcode(ver 12.0.1)
iPhoneSE(2nd Generation)
iPhone OSver 14.0.1
Swift5.3

Voraussetzungen

① Verbinden Sie MacBook Air und iPhone mit einem USB-Kabel (2) Erstellen Sie mit Xcode eine Projektanwendung namens "Sample" auf dem Desktop. ③ Sample hat PromiseKit bereits mit CocoaPods installiert. ④ Schreiben Sie diesmal den Code in ViewController.swift in Sample.

Grundcode

ViewController.swift


import UIKit
import PromiseKit

class ViewController: UIViewController {

        override func viewDidLoad() {

            let promise = Promise<String> { value in
                //wird bearbeitet
            }.done { value in
                //Bei Erfolg ausführen
            }.catch { error in
                //Führen Sie es aus, wenn es fehlschlägt
            }.finally {
                //Letzter Lauf
            }
        }
    
}

Codebeispiel ①

ViewController.swift


import UIKit
import PromiseKit

class ViewController: UIViewController {

        override func viewDidLoad() {
            print("-----Versprechen von hier-----")
            
            let promise = Promise<String> { value in
                //wird bearbeitet
                DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
                    value.fulfill("sample1")
                    print("\(Date()) [1]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
                    value.fulfill("sample2")
                    print("\(Date()) [2]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
                    value.fulfill("sample3")
                    print("\(Date()) [3]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                    value.fulfill("sample4")
                    print("\(Date()) [4]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                    value.fulfill("sample5")
                    print("\(Date()) [5]:\(value)")
                }
                print("\(Date()) [6]:\(value)")
            }.done { value in
                //Bei Erfolg ausführen
                print("\(Date()) [7]:\(value)")
            }.catch { error in
                //Führen Sie es aus, wenn es fehlschlägt
                print("\(Date()) [8]:\(error.localizedDescription)")
            }.finally {
                //Letzter Lauf
                print("\(Date()) [9]: Beendet die Verarbeitung")
            }
            print("-----verspreche bis hierher-----")
        }
    
}

Codebeispiel ① Ausführungsergebnis

Xcode-Protokoll


-----Versprechen von hier-----
2020-10-22 13:16:28 +0000 [6]:PromiseKit.Resolver<Swift.String>
-----verspreche bis hierher-----
2020-10-22 13:16:29 +0000 [5]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:16:29 +0000 [7]:sample5
2020-10-22 13:16:29 +0000 [9]: Beendet die Verarbeitung
2020-10-22 13:16:30 +0000 [4]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:16:31 +0000 [3]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:16:32 +0000 [2]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:16:33 +0000 [1]:PromiseKit.Resolver<Swift.String>

Codebeispiel ②

ViewController.swift


import UIKit
import PromiseKit

enum SampleError: Error {
    case error1
    case error2
    case error3
}

class ViewController: UIViewController {

        override func viewDidLoad() {
            print("-----Versprechen von hier-----")
            
            let promise = Promise<String> { value in
                //wird bearbeitet
                value.reject(SampleError.error1)
                
                DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
                    value.fulfill("sample1")
                    print("\(Date()) [1]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) {
                    value.fulfill("sample2")
                    print("\(Date()) [2]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
                    value.fulfill("sample3")
                    print("\(Date()) [3]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                    value.fulfill("sample4")
                    print("\(Date()) [4]:\(value)")
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                    value.fulfill("sample5")
                    print("\(Date()) [5]:\(value)")
                }
                print("\(Date()) [6]:\(value)")
            }.done { value in
                //Bei Erfolg ausführen
                print("\(Date()) [7]:\(value)")
            }.catch { error in
                //Führen Sie es aus, wenn es fehlschlägt
                print("\(Date()) [8]:\(error.localizedDescription)")
            }.finally {
                //Letzter Lauf
                print("\(Date()) [9]: Beendet die Verarbeitung")
            }
            print("-----verspreche bis hierher-----")
        }
    
}

Codebeispiel ② Ausführungsergebnis

Xcode-Protokoll


-----Versprechen von hier-----
2020-10-22 13:26:04 +0000 [6]:PromiseKit.Resolver<Swift.String>
-----verspreche bis hierher-----
2020-10-22 13:26:04 +0000 [8]:The operation couldn’t be completed. (Sample.SampleError error 0.)
2020-10-22 13:26:04 +0000 [9]: Beendet die Verarbeitung
2020-10-22 13:26:05 +0000 [5]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:26:06 +0000 [4]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:26:07 +0000 [3]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:26:08 +0000 [2]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:26:09 +0000 [1]:PromiseKit.Resolver<Swift.String>

Codebeispiel ③

ViewController.swift


import UIKit
import PromiseKit

enum SampleError: Error {
    case error1
    case error2
    case error3
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        print("-----Versprechen von hier-----")
        
        let promise = Promise<String> { value in
            //wird bearbeitet
            value.fulfill("sample1")
            print("\(Date()) [1]:\(value)")
            
            value.fulfill("sample2")
            print("\(Date()) [2]:\(value)")
            
            value.fulfill("sample3")
            print("\(Date()) [3]:\(value)")
            
            value.fulfill("sample4")
            print("\(Date()) [4]:\(value)")
            
            value.fulfill("sample5")
            print("\(Date()) [5]:\(value)")
            
            print("\(Date()) [6]:\(value)")
        }.done { value in
            //Bei Erfolg ausführen
            print("\(Date()) [7]:\(value)")
        }.catch { error in
            //Führen Sie es aus, wenn es fehlschlägt
            print("\(Date()) [8]:\(error.localizedDescription)")
        }.finally {
            //Letzter Lauf
            print("\(Date()) [9]: Beendet die Verarbeitung")
        }
        print("-----verspreche bis hierher-----")
    }
    
}

Codebeispiel ③ Ausführungsergebnis

Xcode-Protokoll


-----Versprechen von hier-----
2020-10-22 13:29:03 +0000 [1]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:29:03 +0000 [2]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:29:03 +0000 [3]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:29:03 +0000 [4]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:29:03 +0000 [5]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:29:03 +0000 [6]:PromiseKit.Resolver<Swift.String>
-----verspreche bis hierher-----
2020-10-22 13:29:03 +0000 [7]:sample1
2020-10-22 13:29:03 +0000 [9]: Beendet die Verarbeitung

Codebeispiel ④

ViewController.swift


import UIKit
import PromiseKit

enum SampleError: Error {
    case error1
    case error2
    case error3
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        print("-----Versprechen von hier-----")
        
        let promise = Promise<String> { value in
            //wird bearbeitet
            value.reject(SampleError.error1)
            
            value.fulfill("sample1")
            print("\(Date()) [1]:\(value)")
            
            value.fulfill("sample2")
            print("\(Date()) [2]:\(value)")
            
            value.fulfill("sample3")
            print("\(Date()) [3]:\(value)")
            
            value.fulfill("sample4")
            print("\(Date()) [4]:\(value)")
            
            value.fulfill("sample5")
            print("\(Date()) [5]:\(value)")
            
            print("\(Date()) [6]:\(value)")
        }.done { value in
            //Bei Erfolg ausführen
            print("\(Date()) [7]:\(value)")
        }.catch { error in
            //Führen Sie es aus, wenn es fehlschlägt
            print("\(Date()) [8]:\(error.localizedDescription)")
        }.finally {
            //Letzter Lauf
            print("\(Date()) [9]: Beendet die Verarbeitung")
        }
        print("-----verspreche bis hierher-----")
    }
    
}

Codebeispiel ④ Ausgabeergebnis

Xcode-Protokoll


-----Versprechen von hier-----
2020-10-22 13:33:08 +0000 [1]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:33:08 +0000 [2]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:33:08 +0000 [3]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:33:08 +0000 [4]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:33:08 +0000 [5]:PromiseKit.Resolver<Swift.String>
2020-10-22 13:33:08 +0000 [6]:PromiseKit.Resolver<Swift.String>
-----verspreche bis hierher-----
2020-10-22 13:33:08 +0000 [8]:The operation couldn’t be completed. (Sample.SampleError error 0.)
2020-10-22 13:33:08 +0000 [9]: Beendet die Verarbeitung

Recommended Posts

[Swift] Asynchrone Verarbeitung mit PromiseKit
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Feder mit Kotorin --6 Asynchrone Verarbeitung
Datenverarbeitung mit Apache Flink
[Verarbeitung] Versuchen Sie es mit GT Force.
CSV-Ausgabeverarbeitung mit Super-CSV
Versuchen Sie, die asynchrone Verarbeitung in Azure zu implementieren
[Swift] Über die iterative Verarbeitung von "for-in-Anweisungen"
Implementieren Sie die deklarative Wiederholungsverarbeitung mit Spring Retry
Implementierung der asynchronen Verarbeitung in Tomcat
Löschen von Dateien mit rekursiver Verarbeitung [Java]
Führen Sie die Parallelverarbeitung mit dem CyclicBarrier von Java durch