Я застрял в последние несколько дней. Я использую модули openshift для извлечения всех модулей и их состояния, используя node.js
npm i okd-api
Ниже приведен фрагмент для извлечения списка модулей
aws_app.get('/fetchList', async function(req,res){
await getServices().then((allServices)=>{
console.log("allServices",allServices)
res.send(allServices)
})
.catch((err)=>{throw err;})
})
async function getServices(){
return await new Promise(async (resolve,reject)=>{
let config = {
cluster:'master openshift url',
user: 'username',
password: 'password',
strictSSL: false
}
let WMArr=[];
let resArr=[] ;
await login(config)
.then(async(okd) =>{
console.log("okd",okd)
await okd.namespace('namespaceHere')
.pod
.watch_all( async(pods) =>{
console.log("pods",pods)
await pods.map((v)=>
{
if(!WMArr.includes(v.object.metadata.labels.app))
{
let obj={"name":v.object.metadata.labels.app,"Instance":WMArr.lastIndexOf(v.object.metadata.labels.app)===WMArr.indexOf(v.object.metadata.labels.app)?1:WMArr.lastIndexOf(v.object.metadata.labels.app)+1,"Status":v.object.status.phase}
resArr.push(obj);
}
WMArr.push(v.object.metadata.labels.app);
console.log("WMArr",WMArr,"resArr",resArr)
});
})
if(resArr!==null &&resArr!== undefined&& resArr.length1==0){
resolve(resArr)
}else{
reject("not found")
}
})
.catch(err => {throw err})
})
.then((state) => {
console.log("state",state)
})
.catch((error) => {
console.log("erdfkkg",error)
});
}
Я где-то ошибаюсь, обещание так и не решается. I C, результаты в console.log Мой подход неверен, пожалуйста, исправьте меня Может кто-нибудь, дайте мне знать, где я ошибаюсь, я ' Я все еще не смог достичь результата Независимо от того, какая следующая ошибка выдана
Необработанный отказ по адресу: Promise Promise {'noData'} причина: undefined
aws_app.get('/fetchList', function(req,res){
getServices().then((allServices)=>{
console.log("allServices",allServices)
res.send(allServices)
})
.catch((err)=>{throw err;})
})
async function getServices(){
let arrRes=[];
try{
let prom= new Promise(async(resolve,reject)=>{
let config = {
cluster:'master openshift url',
user: 'username',
password: 'password',
strictSSL: false
}
let allpodsData= login(config)
.then(async (okd) =>{
console.log("okd",okd)
let nnn= new Promise(async(resolve,reject)=>{
okd.namespace('namespacename').pod.watch_all((pods) =>{
console.log("pods",pods)
arrRes.push(pods);
})?resolve(arrRes):reject("noData");
});
let res= await nnn;
if(res)resolve(res);
else reject("No data")
/*if(arrRes!==null &&arrRes!== undefined&& arrRes.length!==0){
resolve(arrRes);}
else reject("No data")*/
})
.catch(err => {throw err})
})
let result = await prom;
alert(result)
}
catch(err){console.log("err",err)
throw err;}
}
Независимо от того, что я использую async / awiat, обещания, затем ловлю, я не получаю результат. сначала обещание отклоняется, затем обещание разрешается
Follwoing приводит к тому, что проблема не возвращается после ее решения, возвращается до ее разрешения, поэтому нет данных. следующее возвращает обещание, я не уверен, как с ним справиться, может кто-нибудь попросит помочь мне
okd.namespace('namespacename').pod.watch_all((pods) =>{
console.log("pods",pods)
arrRes.push(pods);
})?resolve(arrRes):reject("noData");
Мой подход неверен, пожалуйста, исправьте меня Может кто-нибудь, дай мне знать, где я иду не так