在未定义长度的循环中调用wsdl(我知道这听起来很奇怪。请继续阅读。)

时间:2018-08-24 20:57:23

标签: javascript node.js soap soap-client

我正在使用node-soap调用Soap api,并且由于数据来自旧系统,因此存在一些约束。我需要调用一个初始方法“ getDashboardEvents”,该方法为最近的更改事件返回一个带有ID的对象数组。然后,我需要创建一个参数字符串,并将那些逗号分隔的ID传递到下一个方法“ getRequestsWithoutAttachments”中,以返回所需的JSON数据。

棘手的是,“ getDashboardEvents”方法一次仅返回50条记录,但可以有1到1000条记录之间的任意位置。 “ getRequestsWithoutAttachments”限制为1024个字符。此服务需要部署到Azure,并且每隔30分钟调用一次。因此,将每30分钟调用一次getDashboardEvents,这种情况发生时,我需要不断从soap服务中提取数据,直到response.length小于50。下面是该方法可用于50个或更少的记录。我尝试了while循环和do while等,但是还没有完全正确。任何帮助将不胜感激。

function getDashboardEvents() {
  return new Promise((resolve, reject) => {
    soap.createClient(apiWSDL, (err, client) => {
      if (err) throw new Error(err);
      const paramArray = [];
      const args = '';
      const header ='xxxxxxx';
      client.addSoapHeader(header);
      client.getDashboardEvents(args, (error, result) => { // eslint-disable-line
        if (error || !result) reject(error);
        else {
          const arr = result.afsRequests.afsServiceRequest;
          for (let i = 0; i < arr.length; i += 1) {
          paramArray.push(arr[i].afsReferenceId);
        }
        const params = paramArray.join(',');
        client.getRequestsWithOutAttachments({ identifier: '098', refs: params }, (er, res) => {
          if (er || !res) reject(er);
          const details = res.afsRequests;
          if (details.afsServiceRequest) {
          saveDashboardEvents(details.afsServiceRequest);
          }
          resolve(details);
        });
       }
      });
    });
  });
 }

0 个答案:

没有答案