Javascript 多个HTTP POST请求没有相应地返回响应
我试图在这里通过迭代数据库来检索未来可能有成百上千个http POST请求的响应。我没有收到大量请求的响应,但当我只对少数请求使用此选项时,我会得到完美的响应。你能解释一下我如何确保得到所有的回复吗?提前谢谢Javascript 多个HTTP POST请求没有相应地返回响应,javascript,node.js,firebase,google-cloud-functions,Javascript,Node.js,Firebase,Google Cloud Functions,我试图在这里通过迭代数据库来检索未来可能有成百上千个http POST请求的响应。我没有收到大量请求的响应,但当我只对少数请求使用此选项时,我会得到完美的响应。你能解释一下我如何确保得到所有的回复吗?提前谢谢 async function getDataFromDB(){ var allPromise = []; var i = 0; let d1 = new Date; let utc1 = d.getTime() + (d.getTimezoneOffset() * 60000); let
async function getDataFromDB(){
var allPromise = [];
var i = 0;
let d1 = new Date;
let utc1 = d.getTime() + (d.getTimezoneOffset() * 60000);
let myDate1 = new Date(utc + (3600000*(+6.0)));
myDate1 = myDate1.toString();
return ref.on('value',function(snapshot){
snapshot.forEach(function(childSnapshot){
var childData = childSnapshot.val();
allPromise.push(callbackFunction(childSnapshot.key, childData['ReceiptData'], myDate1));
});
Promise.all(allPromise)
.then((result) =>{
for (i = 0; i < allPromise.length; i++) {
parseData(ids[i], result[i], myDate1);
}
return result;
})
.catch((err) =>{
console.log("promise error :"+err);
});
console.log("done");
});
}
let callbackFunction = function(userID, receiptData, myDate){
console.log("from callback");
return new Promise(function(resolve, reject){
setTimeout(()=>{
let password = 'my_password';
const data = JSON.stringify({
'receipt-data': receiptData,
'password' : password,
'exclude-old-transactions': false
});
const options = {
resolveWithFullResponse: true,
hostname: 'buy.itunes.apple.com',
port: 443,
path: '/verifyReceipt',
method: 'POST',
json: true,
headers: {
'Content-Type': 'application/json',
}
};
try{
const req = https.request(options, res => {
myStatusCode[0] = res.statusCode;
var body = '';
console.log(`statusCode : ${res.statusCode} : ${userID}`);
res.on('data', d => {
body = body + d;
});
res.on('end', () => {
body = JSON.parse(body);
console.log("body keys = " + body.keys);
resolve(body);
});
res.on("error", err => {
console.error("request error : "+err);
reject(err);
});
});
req.write(data);
req.end();
}catch(er){
console.error("request error : "+ er);
}
});
},1500);
}
看起来你做的太多了,同时也许下了太多的承诺。考虑到这个数字将来会增加,我建议先批量生产,然后再发送过来 像这样的东西可以帮助-
您真的不应该使用实时数据库的on-in-Cloud函数。如果您想一次性获取数据,请使用一次,并利用它返回的承诺。如果您使用的节点是单线程的,则我认为它不适合您的应用程序。使用一次而不是on后,可以解决问题。谢谢。
batchPromises(100, snapshot, childSnapshot => {
const childData = childSnapshot.val();
return callbackFunction(childSnapshot.key, childData.ReceiptData, myDate1);
})