承诺和异步等待不起作用-未经处理的拒绝位于:承诺承诺{<;拒绝>;';节点数据';}原因:未定义-node.js
我被困在过去的几天里,我使用openshift模块使用node.js获取所有pod及其状态承诺和异步等待不起作用-未经处理的拒绝位于:承诺承诺{<;拒绝>;';节点数据';}原因:未定义-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)=>{
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)=>
withwait
如果我执行我在问题中粘贴的代码,我会得到相同的结果唯一的问题是我没有在这里得到它///***res.send(allServices)***//因为这是先执行的,而不是等待函数返回。是的,以与我相同的方式得到结果没有区别