承诺和异步等待不起作用-未经处理的拒绝位于:承诺承诺{<;拒绝>;';节点数据';}原因:未定义-node.js

承诺和异步等待不起作用-未经处理的拒绝位于:承诺承诺{<;拒绝>;';节点数据';}原因:未定义-node.js,node.js,promise,async-await,try-catch,Node.js,Promise,Async Await,Try Catch,我被困在过去的几天里,我使用openshift模块使用node.js获取所有pod及其状态 npm i okd-api 下面是获取pod列表的代码段 aws_app.get('/fetchList', async function(req,res){ await getServices().then((allServices)=>{

我被困在过去的几天里,我使用openshift模块使用node.js获取所有pod及其状态

npm i okd-api
下面是获取pod列表的代码段

                    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");
我的方法错了吗?请纠正我
有人能告诉我哪里出了问题吗

检查这是否运行,如果看到编译错误,请更正几位

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

}
以下作品

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

你的控制台日志打印是什么?你在哪里需要帮助?不要混用
。然后(…)。用async/await捕获(…)
,选择一个并坚持使用。似乎你正在尝试将
await
与不返回承诺的函数一起使用。这根本没用,
await
实际上不会
await
<代码>等待仅在等待承诺时才执行有用的操作。似乎
okd.namespace().pod.watch_all()
不太可能返回承诺。
pods.map()
似乎不太可能返回承诺。这完全是对
async/await
的误用和误解。请阅读它的实际工作原理。console.log(“WMArr”,WMArr,“resArr”,resArr)在拒绝错误显示之前,结果将反映在提示上,而不是等待结果集显示resolve@root我使用了then catch,但它不起作用,不仅是async/await,也不是两者都起作用,我不知道为什么它不起作用,我不知道c结果res.send(allServices)//////////////okd.namespace('namespaceHere').pod.watch_all((pods)=>*//////->这会返回一个承诺,需要处理,但我不确定,所以现在需要了解pods返回的内容。我认为执行工作正常now@Tested更新行
等待pods.map((v)=>
with
wait
如果我执行我在问题中粘贴的代码,我会得到相同的结果唯一的问题是我没有在这里得到它///***res.send(allServices)***//因为这是先执行的,而不是等待函数返回。是的,以与我相同的方式得到结果没有区别