gpt4 book ai didi

javascript - 在异步函数中等待等待多长时间?

转载 作者:行者123 更新时间:2023-12-01 15:55:35 27 4
gpt4 key购买 nike

我想知道,在异步函数中等待等待多长时间 [因此将每个资源保留在 RAM 中]。
考虑这个例子:

async function my_func(some_big_sized_data){
let db_input = await gettingDBinputWhichIsDamnedSlow();
//then do some processing based on db_input and some_big_sized_data
}

现在,如果 DB 一直在回复该怎么办。
await 函数将等待并保存所有这些数据 [并在此过程中占用 RAM] 多长时间?
是否也有等待超时,或者等待实际上可以无限等待? 【如何控制这个超时时间】

最佳答案

await实际上是消耗 promise 的语法糖。 promise 可以永远挂起,await 也是如此。异步/等待没有内置的超时机制。

例子:

async function foo() {
await new Promise(r => r);
console.log('complete');
}

如果你运行这个 foo 函数,那 await 永远不会解决,所以它永远不会到达 console.log('complete') .

但是 await本身不支持 RAM。某些资源是留在RAM中还是被GC'ed取决于引用计数,这种机制与 await无关.

我说异步/等待没有内置的超时机制。但是,由于它只是 promise 的语法糖,您可以将 gettingDBinputWhichIsDamnedSlow 包装起来。 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)
})
})

关于javascript - 在异步函数中等待等待多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61220317/

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