[英]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.