Реагировать на встроенную функцию обратного вызова с быстрым завершением - PullRequest
0 голосов
/ 09 апреля 2020

Я добавил код для вызова функции swift из реактивной системы, и она работает нормально. Я использовал Shopify mobile-buy-sdk- ios для входа пользователя, и после входа в систему пользователь возвращает маркер доступа, эта функция входа использовала завершение .

Поэтому я хочу вернуть этот токен доступа в мой файл js. Я знаю, что могу сделать это с помощью функции обратного вызова, но вопрос в том, куда поместить эту функцию обратного вызова

Вот мой код входа в систему. js

NativeModules.Counter.getLogin(value => {
  console.warn("access token " + value)
})

login.m

RCT_EXTERN_METHOD(getLogin: (RCTResponseSenderBlock)callback)

login.swift

import Foundation
import MobileBuySDK

@objc(Counter)
class Counter: NSObject {

  private let client: Graph.Client = Graph.Client(
    shopDomain: "mydomain",
    apiKey:     "12309080999"
  )

  private override init() {
      self.client.cachePolicy = .cacheFirst(expireIn: 3600)
  }

  typealias completion = (_ success:String) -> Void


  @objc
  func getLogin(email: String, password: String, _ callback: RCTResponseSenderBlock) {

    let myLogin = login(email: "john.smith@gmail.com",password: "123456", completion: { (success) -> Void in

      })

    //callback([count])
  }


  @objc
  func login(email: String, password: String, completion: @escaping (String?) -> Void) {
    let mutation = ClientQuery.mutationForLogin(email: "john.smith@gmail.com", password: "123456")

    let task = client.mutateGraphWith(mutation) { (mutation, error) in
            error.debugPrint()
            if let container = mutation?.customerAccessTokenCreate?.customerAccessToken {
                completion(container.accessToken)
              //res = container.accessToken
            } else {
                let errors = mutation?.customerAccessTokenCreate?.customerUserErrors ?? []
                print("Failed to login customer: \(errors)")
               completion(nil)
            }
        }
    task.resume()
  }
}

extension Optional where Wrapped == Graph.QueryError {

    func debugPrint() {
      print("testingngngn")
        switch self {
        case .some(let value):
            print("Graph.QueryError: \(value)")
        case .none:
            break
        }
    }
}

Заранее спасибо за помощь, я пробую ее за последние 2 дня, поэтому, пожалуйста, любой может иметь решение, пожалуйста, дайте мне.

Спасибо

...