gpt4 book ai didi

javascript - 延迟 catch of promise 的调用

转载 作者:行者123 更新时间:2023-11-29 07:30:57 27 4
gpt4 key购买 nike

我的 Db 包装器表单 nodejs mysql 中有一个方法如下:

let mysql=require('mysql')
query(sql,args,count=0){
let con=mysql.createConnection(configs[this.config])
return new Promise((resolve,reject)=>{
con.query(sql,args,(e,r)=>{
if(e){

if(e.code=='ER_CON_COUNT_ERROR'){
reject(e)
}
r=false
}
con.end(e=>{
return resolve(r)
})
})
}).catch(e=>{
//want to delay this call
if(count<5){
return this.query(sql, args,count+1)
}
return false
})
}

如果失败,我将递归调用 query 但它会立即发生。我想根据决定重试次数的 count 延迟此调用。

我是这样使用它的:

let test=async()=>{
let promises=[]
for(let i=1;i<100;i++){
promises.push(db.query('SELECT * FROM verbs'))
}
let r=await Promise.all(promises)
console.log(r[r.length-1],r.length)
}
test();

有什么好的方法可以做到这一点?我尝试使用 setTimeout,但这弄乱了 promise 链,如果成功我也无法退出。

最佳答案

试试这个内部捕获,

let mysql=require('mysql')
query(sql,args,count=0){
let con=mysql.createConnection(configs[this.config])
return new Promise((resolve,reject)=>{
con.query(sql,args,(e,r)=>{
if(e){

if(e.code=='ER_CON_COUNT_ERROR'){
reject(e)
}
r=false
}
con.end(e=>{
return resolve(r)
})
})
}).catch(e=>{
//want to delay this call
return new Promise((resolve,reject)=>{
setTimeout(()=>{
this.query(sql, args,count+1).then(resolve).catch(reject);
},2000);
});
})
}

关于javascript - 延迟 catch of promise 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51319020/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com