承诺和异步等待不起作用-未处理的拒绝在:承诺承诺{<rejected>'noData'}原因:未定义-node.js

时间:2020-01-24 05:41:26

标签: node.js promise async-await try-catch

过去几天,我一直在使用openshift模块通过node.js获取所有Pod及其状态

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)
                        });
                    }

我在诺言从未解决的某个地方出了错.IC,结果在console.log中 我的方法有误吗,请纠正我 有人让我知道我要去哪里错吗 我仍然无法达到目标 不管引发什么以下错误

未处理拒绝的原因:承诺承诺{'noData'}原因:未定义

                 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,还是答应,然后接住我都不会得到结果。 首先,诺言被拒绝,然后诺言得以解决

关注导致问题在解决之后不再返回,在解决之前返回,因此没有数据。以下内容返回了一个承诺,我不确定如何处理该承诺,任何人都可以请我帮忙

                    okd.namespace('namespacename').pod.watch_all((pods) =>{
                                                console.log("pods",pods)   
                                                arrRes.push(pods);                            
                                        })?resolve(arrRes):reject("noData");

我的方法是否错误,请纠正我 有人让我知道我要去哪里哪里

2 个答案:

答案 0 :(得分:0)

检查是否可以运行,如果看到编译错误,请更正几分,

malloc

答案 1 :(得分:0)

以下作品

               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];