0

我正在使用最新的 Salesforce 移动 SDK 开发一个 iOS 应用程序来与 CRM 交互。

我有 2 个 SOQL 查询要同步执行,以便从第一个查询中检索到的数据可以在第二个查询中使用。Salesforce Mobile 6.1 有一个类似的选项:

    let restApi  = SFRestAPI.sharedInstance()
 restApi.Promises.query(soql: "SELECT Id,FirstName,LastName FROM User")
 .then { request in
    restApi.Promises.send(request: request)
 }
 .done { sfRestResponse in
    restResponse = sfRestResponse.asJsonDictionary()
    ...
 }
 .catch { error in
   //handle error
 }

但在最新的 SDK 中,Promises 已被弃用。使用最新的 SalesForce Mobile SDK 同步执行 SOQL 查询的更好方法是什么?

4

1 回答 1

0

Salesforce iOS SDK 6.2 版使用 PromiseKit 来同步链接异步任务(例如 Web 请求)。即使在他们的 7.0 SDK 中不支持开箱即用,您仍然可以导入它以在您的项目中使用:PromiseKit

如果您想使用新的 7.0 SDK 在本地完成相同的功能,最简单的方法是链接回调:

let queryRequestOne = RestClient.sharedInstance().buildQueryRequest(soql:"SELECT ... FROM ...")

RestClient.sharedInstance().send(request: queryRequestOne, onFailure: { (error, urlResponse) in
    SFSDKLogger.sharedInstance().log(type(of:self), level:.debug, message:"Error invoking: \(queryRequestOne)")
}) { [weak self] (response, urlResponse) in

    //Parse data from web response
    //..

    let queryRequestTwo = RestClient.sharedInstance().buildQueryRequest(soql:"SELECT ... FROM ...")

    RestClient.sharedInstance().send(request: queryRequestTwo, onFailure: { (error, urlResponse) in
        SFSDKLogger.sharedInstance().log(type(of:self), level:.debug, message:"Error invoking: \(queryRequestTwo)")
    }) { [weak self] (response, urlResponse) in

        //Parse data from web response and update UI on main thread

    }
}
于 2018-12-10T20:44:02.297 回答