您可以基于 qbo3 API 调用构造一个 Promise,如下所示:
qbo3.getPromise = function(cn, method, data) {
return new Promise(function(resolve, reject) {
new (qbo3[cn] || qbo3[cn + 'Object'])().invokeJson(method, data, { success: resolve, error: reject });
})
}
地点:
-
cn:是 API 端点的类名(例如,Process、Loan、Person、Message 等)
-
method:是要调用的类方法(例如Select、Search、Update等)
-
data:是要提交的JSON数据
(qbo3[cn] || qbo3[cn + 'Object']) 表达式只是让您将Process 或ProcessObject 作为cn 参数传递给qbo3.getPromise(...) 的一点糖。
那么你可以使用:
var data = {...}
var myPromise = qbo3.getPromise('Process', 'StartRecordingTime', data)
.then(return qbo3.getPromise('Process', 'RealWorldApiCall', data))
.then(return qbo3.getPromise('Process', 'EndRecordingTime', {}))
更通用的用法是利用一个 API 的结果将数据传递给后续调用:
var somePromise = qbo3.getPromise('Person', 'Search', {"Person": "someuser@acme.com"})
.then(json => {
const id = json.PersonCollection.PersonItem[0].PersonID;
return qbo3.getPromise('ProcessObject', 'Search', { "CreatedPersonID": id })
}).then(processes => console.log(processes));
请注意,如果您只是对响应时间进行故障排除,qbo3 会在所有 API 调用中包含一个 X-Execution-Time 响应标头。此标头不会传递给 resolve 方法,您可以从 Chrome 的开发者控制台的 Network 表中检查它,如下图所示: