Вызов wsdl в цикле неопределенной длины (я знаю, звучит странно. Читайте дальше.) - PullRequest
0 голосов
/ 24 августа 2018

Я использую node-soap для вызова soap api, и поскольку данные взяты из устаревшей системы, существуют некоторые ограничения.Мне нужно вызвать начальный метод getDashboardEvents, который возвращает массив объектов с идентификаторами для недавних событий изменения.Затем мне нужно создать строку параметров и передать эти идентификаторы, разделенные запятыми, в следующий метод 'getRequestsWithoutAttachments', чтобы вернуть нужные мне данные JSON.

Сложность в том, что метод getDashboardEvents вернет только 50записей одновременно, но может содержать от 1 до 1000 записей.'getRequestsWithoutAttachments' имеет ограничение в 1024 символа.Эту службу необходимо развернуть в Azure и вызывать с 30-минутным интервалом.Итак, getDashboardEvents будет вызываться каждые 30 минут, и когда это произойдет, мне нужно будет продолжать извлекать данные из службы мыла до тех пор, пока response.length не станет меньше 50. Ниже приведен метод, который работает для 50 или менее записей.Я пробовал цикл времени, время и т. Д., Но пока не совсем понял.Любая помощь будет принята с благодарностью.

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);
        });
       }
      });
    });
  });
 }
...