能否使用Await等待条件返回true?技术可行性咨询
能不能用
await等待某个条件变为true? 直接写await(x===true)是行不通的——await只能用来等待Promise对象的状态完成,而x===true这种表达式返回的是布尔值,不是Promise,所以这么写只会同步执行,完全起不到“等待条件满足”的效果。
不过你想要的“等待直到条件为true”的功能是可以实现的,只需要把条件判断包装成一个Promise就行,比如封装一个工具函数:
function waitUntil(condition) { return new Promise((resolve) => { // 先做一次即时检查,避免没必要的等待 if (condition()) { resolve(); return; } // 用定时器轮询检查条件 const checkInterval = setInterval(() => { if (condition()) { clearInterval(checkInterval); resolve(); } }, 50); // 可以根据需求调整轮询的时间间隔 }); }
使用的时候就很简单了,把你要等待的条件写成一个函数传进去:
// 等待x变为true await waitUntil(() => x === true);
额外说明
- 轮询间隔要根据实际场景调整:间隔太小会频繁触发检查,消耗性能;太大则会让等待的响应变迟钝。
- 如果需要支持取消等待逻辑,可以给这个函数扩展取消功能,比如返回一个取消函数,或者传入AbortSignal来控制。
内容的提问来源于stack exchange,提问作者Cerric Liadon
相关产品推荐
相关产品推荐

