我如何链接qbo3 API调用作为中的承诺?
我试图让下面的JavaScript在点击var api之后暂停,直到var data完成为止。然后,在完成之后,函数可以像往常一样继续运行。总体目标是获得一个大约。度量查询在通过函数调用被调用后运行所需的时间。
var data = {...};
var api1 = new qbo3.ProcessObject();
api1.invokeJson('StartRecordingTime',data);
var api2 = new qbo3.ProcessObject({target: 'row_4'});
api2.invokeHtml('RealWorldApiCall', data);
var api3 = new qbo3.ProcessObject();
api3.invokeJson('EndRecordingTime');发布于 2021-04-07 22:12:28
您可以根据qbo3 API调用构建一个承诺,如下所示:
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端点的className (例如Process、Loan、Person、Message、etc.)method:是要调用的类方法(例如Select、Search、Update、etc.)data:是提交F 219的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将包含一个X-Execution-Time响应头--所有的API调用。此标头不会传递给resolve方法,您可以从Chrome的开发人员控制台的Network表中检查它,如下图所示:

https://stackoverflow.com/questions/66994800
复制相似问题