簡體   English   中英

Nodejs的多個發布請求

[英]Multiple post request by Nodejs

我對如何一個接一個地發出發布請求而不用盡服務器資源感到有些困惑。 我正在嘗試重新構建大量數據並將其一一發布到新的 ZCCADDEDB567ABAE643E15DCF0974E503Z 數據庫,我正在使用 mac pro 服務網關。 以下是我的一些代碼:

http.get(option, (res) => {
        
        res.on('data', function (chunk) {
            str += chunk;
        });

        
        res.on('end', async function() {
             var data = [];
             
            data = await JSON.parse(str);
            *// code is sucessfully till here, all data is received and parse properly*    
            data.forEach(item => {
                    var newData = item;
                    // console.log(newData);
                    postData(dataCat, newData);
    
                // console.log(item);
            })
            // console.log(str);
            });


            
        str = "";
    });
function postData(dataCat, newData) {
        
    // option = 'http://localhost:3008/pbapi/' + dataCat;
    // console.log(newData);

    var post_options = {
        host: '192.168.1.155',
        port: '3008',
        path: '/pbapi/' + dataCat,
        method: 'POST',
        headers: {
            'Content-Type': 'application/JSON'
        }
    };

    var post_req = http.request(post_options, function(res) {
        res.setEncoding('utf8');
        res.on('end', function (chunk) {
            console.log('Response: ' + chunk);
        });
    });

    post_req.write(newData);
    post_req.end();

}

** postData() 針對單個 JSON object 進行了測試 forEach 循環僅在數據長度低於 2000 時才有效(我僅在 2000 年之前測試成功並在 2500 時失敗)。

錯誤代碼:'ENFILE' 如果我為 forEach 循環輸入 2500 及以上

如果你想一個一個地提出請求,你應該把你的帖子包在 Promise 中,然后等待,完成后,再做下一個 Promise。

它稱為承諾 你可以在這里閱讀

for (let i = 0, p = Promise.resolve(); i < data.length; i++) {
            p = p.then(_ => new Promise(resolve =>
                setTimeout(function () {
                    postData(dataCat, JSON.stringify(data[i]));
                    console.log(i);
                    resolve();
                }, Math.random() * 100)
            ));
        }

在此處輸入鏈接描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM