首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qbo3 Javascript承诺

qbo3 Javascript承诺
EN

Stack Overflow用户
提问于 2021-04-07 22:12:28
回答 1查看 50关注 0票数 0

我如何链接qbo3 API调用作为中的承诺?

我试图让下面的JavaScript在点击var api之后暂停,直到var data完成为止。然后,在完成之后,函数可以像往常一样继续运行。总体目标是获得一个大约。度量查询在通过函数调用被调用后运行所需的时间。

代码语言:javascript
复制
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');
EN

回答 1

Stack Overflow用户

发布于 2021-04-07 22:12:28

您可以根据qbo3 API调用构建一个承诺,如下所示:

代码语言:javascript
复制
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 (例如ProcessLoanPersonMessage、etc.)
  • method:是要调用的类方法(例如SelectSearchUpdate、etc.)
  • data:是提交

F 219JSON数据)。

-- (qbo3[cn] || qbo3[cn + 'Object'])表达式只是一点点糖,允许您将ProcessProcessObject作为cn参数传递给qbo3.getPromise(...)

然后你可以使用:

代码语言:javascript
复制
var data = {...}
var myPromise = qbo3.getPromise('Process', 'StartRecordingTime', data)
  .then(return qbo3.getPromise('Process', 'RealWorldApiCall', data))
  .then(return qbo3.getPromise('Process', 'EndRecordingTime', {}))

对于传递给后续调用的数据,利用一个API的结果进行更一般的使用:

代码语言:javascript
复制
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表中检查它,如下图所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66994800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档