Мне нужно создавать обещания в цикле в соответствии с данным конфигурационным файлом и возвращать ответ, когда все будут разрешены. Здесь идет код-Создание обещаний в цикле
{for(let type in spotlight){
switch (type){
case "outliers":{
let ops= spotlight[type];
for(let i=0;i<ops.length;i++){
(function(op){
let p= new Promise(function(resolve,reject){
let reqUrl= urlCreator(op.uri,op.query);
//console.log("--------------------"+reqUrl);
apiService.get(reqUrl,function(isSuccess,data){
if(!isSuccess){
return reject(data);
}
// console.log(isSuccess);
// console.log(data);
// console.log("trend is ------"+JSON.stringify(op));
// create objects array
// let temp= [];
// let overallScore= data.overall.score;
// for(let day in overallScore){
// temp.push({"key": day,"value": parseFloat(overallScore[day])});
// }
//let outliers= stats.outliers(temp,"key","value");
resolve({"type":type,"name": op.name,"data": outliers});
})
});
promiseArray.push(p);
}(ops[i]))
}
break;
}
case "filters":{
let ops= spotlight[type];
for(let i=0;i<ops.length;i++){
(function(op){
let p= new Promise(function(resolve,reject){
let reqUrl= urlCreator(op.uri,op.query);
apiService.get(reqUrl,function(isSuccess,data){
if(!isSuccess){
return reject(data);
}
// console.log(isSuccess);
// console.log(data);
// console.log("coc is ------"+JSON.stringify(op));
resolve({"type": type,"name": op.name,"data": data});
})
})
promiseArray.push(p);
}(ops[i]))
}
break;
}
}
}
Promise.all(promiseArray).then(values=>{
return res.json(values);
},
reason=>{
return res.json(reason);
}).catch(reason=>{
return res.json(reason);
})}
Проблема в том, что обещания никогда не возвращаются, не разрешаются и не отклоняются.
Согласно конфигурационному файлу, он должен ударить по двум URL-адресам, например, u1 и u2. Я попытался зарегистрировать вывод, чтобы увидеть, какие запросы возвращаются. Когда сервер запущен и выполняется первый запрос, U1 возвращается и req зависает. при обновлении я получаю ответ от U2, U2 и зависает запросы, затем снова обновляется U1, U1, и это продолжается. Мне кажется, что по какой-то причине возвращается только один запрос, а другой сидит в буфере или что-то еще и приходит, когда делается следующий запрос. Оба запроса поступают только на локальный сервер, я маршрутизирую его извне, только чтобы использовать кеш, поскольку URL-адрес используется в качестве ключа для кеша.
Я попытался использовать фиктивные URL-адреса, такие как facebook.com и google.com, и он отлично работает. Использование одного локального URL-адреса и другого, например facebook.com, также работает, но когда оба URL-адреса имеют локальный сервер, он застревает.
Имеет ли это какое-либо отношение к однопоточной природе узла или из-за использования одного и того же сокета для выполнения обоих запросов.
PS- Я использую npm-запрос для вызова URL-адресов.