Обещания и асинхронность c ожидание не работает - PullRequest
0 голосов
/ 24 января 2020

Я застрял в последние несколько дней. Я использую модули 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");

Мой подход неверен, пожалуйста, исправьте меня Может кто-нибудь, дай мне знать, где я иду не так

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

следующих работ

               let fetchListarr=[];
                    aws_app.get('/path', async (req,res) =>
                    {
                        try
                        {
                            Promise.all(promisesArray).then(values => {
                            // do stuff with values here
                            console.log("fetchList",values);
                            res.send(values)
                            });   
                        }
                        catch (e){throw e;}
                    });
                    var WMArr=[];
                    var prom1 = new Promise(function(resolve, reject) {      
                            let config = {
                            cluster:'clusterurl',
                            user: 'username',
                            password: 'passowrd',
                            strictSSL:  false  
                            };
                            login(config)
                                        .then(okd=>{
                                            okd.namespace('namespace').pod.watch_all(pods=>{
                                                    pods.map((v)=> {                                                                                                                                                            
                                                            if(!WMArr.includes(v.object.metadata.labels.app))
                                                                {   let obj={"TargetServiceName":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}
                                                                        fetchListarr.push(obj);                                                                       
                                                                }       
                                                            WMArr.push(v.object.metadata.labels.app);                                                                                                                                                                                                                                                                                    
                                                            }); 
                                                    })
                                                    setTimeout(function() {                      
                                                    resolve( fetchListarr);                           
                                                    }, 5000);
                                            })
                                        .catch(err=>{throw err}) 
                        });
                    var promisesArray= [prom1]; 
0 голосов
/ 24 января 2020

Проверьте, работает ли это, исправьте несколько бит, если вы видите ошибки компиляции,

   aws_app.get('/fetchList', async (req,res) =>
  {
    try
    {
        const allServices = await getServices();
        console.log("allServices",allServices);
        res.send(allServices);
    }
    catch (e)
    {
        throw e;
    }

   });



  async function getServices()
  {
    let config = {
        cluster: 'master openshift url',
        user: 'username',
        password: 'password',
        strictSSL: false
    };

    let WMArr = [];
    let resArr = [];

    try
    {
        const okd = await login(config);
        console.log('okd', okd);

        await  okd.namespace('namespaceHere')
            .pod
            .watch_all((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.length == 0)
        {

           throw  new Error("Not Found");
        }

        return resArr;
    }
    catch (e)
    {
       throw e;
    }

}
...