2017-04-18 154 views
1

我几个成功的呼叫后得到一个ETIMEDOUT错误后的NodeJS节点SOAP ETIMEDOUT ... 这里是代码:几个成功的呼叫

soap.createClient("./WSDL/test.wsdl", function (err, soapClient) 
{ 
    if (err) 
    { 
     throw new Error(err) 
    }; 

    bpData.forEach(function (elementOfArray) 
    { 
     soapClient.service.binding.Update({ 
      ProductUpload: { 
       ID: elementOfArray.ProductID, 
       newIndicator: 'false', 
       UpdateIndicator: 'true', 
       UpdateDate: dateFormat(new Date(), 'yyydd'), 
       RawData: elementOfArray.RawData1, 
       RawData2: elementOfArray.RawData2 
      } 
     }, function (err, result) 
     { 
       if (err) 
       { 
        console.log(err); 
        //throw new Error(err); 
       } else 
       { 
        console.log(JSON.stringify(result)); 
        return JSON.stringify(result); 
       } 
      } 
     ); 
..... 

我已经尝试设置超时参数了,但没有改变...

谢谢!

+0

也许您正在查询速度较快,并且一些垃圾邮件防护功能已启用。您是否试图调节您的请求? – Sirko

+0

@Sirko我如何限制请求?谢谢! –

+0

我确定有这样的库,但基本原则如下:从数组中获取第一项并执行请求。当它结束时,采取第二个项目并且重复过程。直到您处理完数组中的所有项目为止。也许在两次请求之间,你必须使用'setTimeout()'添加一些延迟。 – Sirko

回答

0

forEach是一个同步函数,但soapClient.service.binding.Update是异步含义,表示您可以立即对所有请求进行排队。您应该使用async.js或创建自己的函数来等待第一个请求完成第二个请求。

+0

尝试过'async.each(bpFormattedData,function(elementOfArray)''但是同样的事情发生了。我认为@Sirko说我必须调节它,但不幸的是我不知道如何去做。 –

+0

http://stackoverflow.com/a/30514817/7868639这正是你正在寻找的:) – itsundefined

1

谢谢你们!它现在使用异步队列:)。 祝您有个愉快的夜晚

+0

欢迎来到异步的世界。对于初学者来说很难。 – itsundefined

+0

怎么样?请显示代码... tnks – 2017-06-18 04:14:30