Javascript 我怎样才能等到某个值不为null时再运行该函数

Javascript 我怎样才能等到某个值不为null时再运行该函数,javascript,html,angular,typescript,Javascript,Html,Angular,Typescript,因此,当前在ngOnInit上调用此函数highlight,但放入DOM的文本需要一秒钟左右的时间才能写入DOM 因此,当函数运行时,它返回null,并在那里等待文本。当document.getElementById('scrollable')不时,如何运行此函数 到目前为止,我让它运行的唯一方法是超时800ms,但这并不好,因为有些人的internet速度比其他人慢,因此如果internet或计算机加载页面的时间更长,则会导致问题 我试过几种不同的方法,但都不管用。如果有人有什么好的建议,请随

因此,当前在
ngOnInit
上调用此函数
highlight
,但放入
DOM
的文本需要一秒钟左右的时间才能写入
DOM

因此,当函数运行时,它返回
null
,并在那里等待文本。当
document.getElementById('scrollable')
时,如何运行此函数

到目前为止,我让它运行的唯一方法是超时
800ms
,但这并不好,因为有些人的internet速度比其他人慢,因此如果internet或计算机加载页面的时间更长,则会导致问题

我试过几种不同的方法,但都不管用。如果有人有什么好的建议,请随时告诉我

highlight(words) {
      const high = document.getElementById('scrollable');
      const paragraph = high.innerHTML.split(' ');
   }
}
目前使用的是Angular 6

HTML:


TS:

我建议你看一下。您应该使用
AfterViewInit
hook来确保视图已初始化

import { Component, AfterViewInit } from '@angular/core';

@Component({...})
export class MyOwnComponent implements AfterViewInit {

  constructor() { }

  ngAfterViewInit() { // Here your view is checked and initialized.
    this.highlight();
  }

  highlight(words) {
    const high = document.getElementById('scrollable');
    const paragraph = high.innerHTML.split(' ');
    ...
  }

}

你能提供更多的背景吗?你确定这是做这件事的最好方法吗?在Angular中使用document API通常不是一个很好的标志。我正在查看您的GIST:停止使用
document.getElementById
innerHTML
createElement
,Angular为此提供了一个抽象,并建议不要自己处理DOM。如果您继续使用vanillaJS,那么使用Angular就没有意义了。同样,考虑使用这些行为的指令,这在HTML和TS代码中都会更容易使用。很好地考虑到代码的大小和基本的角代码这一事实,我不给你例子,但是你可以在上面查找“<代码>视窗< <代码> > <代码>内插< /代码>,<代码> ReDele2 (或<代码> IVY 角6)。,这些都是为你想要实现的目标而设计的。我知道,当你开始一个新的框架时,需要学习的代码数量是巨大的,但是你应该全身心投入其中,因为一旦你理解了所有这些,你就会获得很多时间。如果你有问题,我们还在这里@安德鲁:那么恭喜你!既然你是一名新的开发人员,让我欢迎你来到编程的奇妙世界,在那里你花10%的时间创建,40%的时间测试,50%的时间重写你的旧代码!在昨天的讨论之后,我向大家展示了在段落中突出硬词的多种处理方法之一。blite的所有评论都是为了向你解释我是如何以及为什么做我所做的每件事的。如果你没有得到任何东西,请随时检查文档,如果你有任何问题,请随时问我!我在几周前测试过这个,但是没有成功,老实说,我希望它能起作用。但是innerHTML在运行时仍然为空。您的页面是如何填充的?通过API调用还是通过静态内容?当数据准备就绪时,应调用此
highlight
函数。这是我的HTML的要点,我将为我的组件创建一个。我把它缩短了,这样你就可以确切地看到我在做什么@乔纳森·哈默尔米: