Javascript 异步函数可以等待多长时间?
我想知道,在异步函数中等待等待(并因此保持RAM中的所有资源)的时间有多长。 考虑这个例子:Javascript 异步函数可以等待多长时间?,javascript,async-await,Javascript,Async Await,我想知道,在异步函数中等待等待(并因此保持RAM中的所有资源)的时间有多长。 考虑这个例子: 异步函数my\u func(一些大数据){ 让db_input=等待gettingdbinputwichisdamnedlow(); //然后根据db_输入和一些大数据进行处理 } 现在,如果DB永远都在回复呢。 等待函数等待和保留所有这些数据[并在过程中保留RAM]需要多长时间? 等待是否也有超时,或者等待可以无限期地等待?[如何控制此超时时间]您无法为wait设置超时,它将阻止承诺的达成 您可以编
异步函数my\u func(一些大数据){
让db_input=等待gettingdbinputwichisdamnedlow();
//然后根据db_输入和一些大数据进行处理
}
现在,如果DB永远都在回复呢。
等待函数等待和保留所有这些数据[并在过程中保留RAM]需要多长时间?
等待是否也有超时,或者等待可以无限期地等待?[如何控制此超时时间]您无法为
wait
设置超时,它将阻止承诺的达成
您可以编写自己的函数来获取超时行为,只需使用Promise.race
API即可
来自以下方面的承诺.race
:
race()方法返回满足或拒绝的承诺
一旦iterable中的一个承诺实现或拒绝,
具有该承诺的价值或理由
函数gettingdbinputwichisdamnedslow(){
返回新承诺((res,rej)=>setTimeout(res,5000,“来自数据库的数据”);
}
//以毫秒为单位计算超时
函数waitWithTimeout(超时,…args){
函数超时(){
返回新的承诺((res,rej)=>setTimeout(rej,timeout,newerror(`timeout out after${timeout}ms`));
}
return Promise.race([…args,timeOut()]);
}
异步函数my\u func(一些大数据){
设db_input=null;
试一试{
db_input=wait waitwithtimeout(1000,gettingdbinputwichisdamnedlow());
}捕获(错误){
console.error(error.message);
}
log(“db_输入”,db_输入);
}
我的函数()
await
实际上是一种使用承诺的语法糖。承诺可以永远等待,等待也是如此。异步/等待没有内置超时机制
例如:
async function foo() {
await new Promise(r => r);
console.log('complete');
}
如果运行这个foo函数,wait将永远无法解决,因此它永远不会到达console.log('complete')
但是,await
本身并不占用RAM。一些资源是留在RAM中还是得到GC’ed取决于引用计数,这种机制与wait
无关
我说过异步/等待没有内置超时机制。但是,由于它只是promise的语法糖,您可以将您的gettingdbinputwichisdamnedslow
promise包装在另一个promise中,以手动创建临时超时控制
await new Promise((resolve, reject) => {
const timeoutId = setTimeout(() => {
reject(new Error('timeout'))
}, 10000) // wait 10 sec
gettingDBinputWhichIsDamnedSlow().then(value => {
clearTimeout(timeoutId)
resolve(value)
})
})
基本上,永远。而且,
wait
不会挂起任何东西。也请检查此链接。可能会有帮助:关于第一个示例,虽然由于setInterval回调,count
确实不能被GCed,但两个承诺都可以,没有任何东西可以引用它。