while (true) { |
我还真没写过这样的代码,在看 ScratchAddons 源码的时候看到好些 addon 在 function 开头都有这样的代码。那这样不就死循环了么?
场景
addon 需要等待页面所需的 dom 加载完成后再执行,于是有了这样的代码。如果是我那应该就是用 observer 或 settimeout 去处理。
while (true)
在 scratchAddon 这个框架下,官方插件都是使用框架 api 配合 while (true) 来确认元素的加载。
原理也很简单, 就是 async await 。
Demo:
const getSomeThing = (() => { |
在 await 成功过一次之后,不再 resolve/reject,保持 Promise 的挂起状态,就可以绕过 while (true) 这个死循环了