【问题标题】:qbo3 Javascript promisesqbo3 Javascript 承诺
【发布时间】:2021-04-07 22:12:28
【问题描述】:

如何在 Javascript 中链接 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');

【问题讨论】:

    标签: promise qbo3


    【解决方案1】:

    您可以基于 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 端点的类名(例如,ProcessLoanPersonMessage 等)
    • method:是要调用的类方法(例如SelectSearchUpdate等)
    • data:是要提交的JSON数据

    (qbo3[cn] || qbo3[cn + 'Object']) 表达式只是让您将ProcessProcessObject 作为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 表中检查它,如下图所示:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      相关资源
      最近更新 更多