async,promise,setimeout配合就行。其它有sleep的语言更简单
/**
* 异步等待对象的生成,对象生成完成返回生成的对象
* @param getter 对象的获取函数
* @param checkSize 检查粒度,ms
* @param timeout 超时时间, ms
*/
export const asyncCheck = async<T> (getter: () => T, checkSize = 100, timeout = 1000) => {
return new Promise<T>(x => {
const check = (num = 0) => {
const target = getter();
if (target !== undefined && target !== null) {
x(target)
} else if (num > timeout / checkSize) {// 超时
x(target)
} else {
setTimeout(() => check(++num), checkSize);
}
};
check();
});
}
let input = await asyncCheck(() => document.querySelector("#input"));