簡體   English   中英

Swift 多個請求返回相同的結果

[英]Swift multiple requests return the same result

我對 API 進行同步 api 調用,在調試器中我看到我得到了不同的結果。 但是我的代碼總是返回相同的 ID:

func fetchIDbySKU(name: String, color: String) -> Data{
    
    
    let sku = name + ":" + color
    let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!

    let semaphore = DispatchSemaphore (value: 0)

    var result = Data()
    
    var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
    request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")

    request.httpMethod = "GET"

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data else {
            print(String(describing: error))
            return
        }
        
        print(String("______________________________________"))
        print(String(data: data, encoding: .utf8)!)
        result = data
        print(String("______________________________________"))
        semaphore.signal()
    }

    task.resume()
    semaphore.wait()
    return result
  }

所以結果總是返回相同的結果,即使我在控制台中看到響應數據不同。

這是我期望返回的代碼:

var request_data = fetchIDbySKU(name: name, color: color_name)
        var product_id = String(request_data[0])
        
        parts_list.append(Item(product_id: product_id, quantity: quantity))

每次調用 function 時都會初始化您的信號量。 只需從 function 中取出信號量的初始化,它就可以正常工作。

    let semaphore = DispatchSemaphore (value: 0)
    
    func fetchIDbySKU(name: String, color: String) -> Data{
    
    
    let sku = name + ":" + color
    let appendedsku = (sku).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    let url: String = "https://www.link.com/wp-json/wc/v1/products?sku=" + appendedsku!

    var result = Data()
    
    var request = URLRequest(url: URL(string: url)! ,timeoutInterval: Double.infinity)
    request.addValue("Basic secret token", forHTTPHeaderField: "Authorization")

    request.httpMethod = "GET"

    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        guard let data = data else {
            print(String(describing: error))
            return
        }
        
        print(String("______________________________________"))
        print(String(data: data, encoding: .utf8)!)
        result = data
        print(String("______________________________________"))
        semaphore.signal()
    }

    task.resume()
    semaphore.wait()
    return result
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM