2017-04-18 50 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