我正在使用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);
});
}
});
});
});
}