Javascript 无法在';window.alert';成角的

Javascript 无法在';window.alert';成角的,javascript,angular,typescript,async-await,alert,Javascript,Angular,Typescript,Async Await,Alert,我正在尝试计算时差,如果时差大于20分钟,我希望显示一条警报消息,然后退出。 我不想遍历所有的行,而是想在找到第一台拥有分钟数{ 返回行==“2”; }); (异步()=>{ for(设i=0;i{const host='abc';const prevData=_this.myService.getData(host);const timeDiff=Math.abs(new Date().getTime()-new Date(prevData[0].dateAt).getTime());cons

我正在尝试计算时差,如果时差大于20分钟,我希望显示一条
警报消息
,然后退出。 我不想遍历所有的
,而是想在找到第一台拥有
分钟数<20
的主机后退出该函数

    this.dataSource.filteredData.forEach(
        async row => {
            this.selection.select(row);
            // const host = row.hostName.substring(0, row.hostName.indexOf('.'));
            const host = 'abc';
            const prevData = await this.myService.getData(host);
            const timeDiff = Math.abs(new Date().getTime() - new Date(prevData[0].dateAt).getTime());
            const minutes = Math.floor((timeDiff / 1000) / 60);
            if (minutes < 20) {
                window.alert('Please check after ' + (20 - minutes) + ' minutes.');
                return false;
            }
        });

在上面的代码中,
this.myService.getData(host)
返回
null

以下是控件编程方式的最低可行表示:

let rows = [1, 2, 3];

let f = (async row => {
  return row === "2";
});

(async () => {
  for (let i = 0; i < rows.length; i++) {
    let result = await f(rows[i]);
    console.log(result);
    if (!result)  {
      break;
    }
  }
})();
let rows=[1,2,3];
设f=(异步行=>{
返回行==“2”;
});
(异步()=>{
for(设i=0;i
有两个问题。首先,您使用的是forEach,因此将对每个元素执行匿名函数。您也在使用异步,所以控制永远不会屈服。您需要手动迭代自己循环中的每一行,并且需要等待函数返回并捕获结果。您能否提供一些关于如何迭代然后等待函数返回的帮助?如果你能提供一个最新的答案,这将是非常有帮助的,我会尝试提供一个答案。我已经更新了我的问题,并尝试使用你给出的答案。在上面的代码中,
this.myService.getData(host)
返回null我不确定,可能是“this”引用的作用域不正确(但我认为ES8会在内部将上下文提升为胖箭头函数块。尝试捕获一个“this”声明函数f之前的引用:
let_this=this;
const f=(异步行=>{const host='abc';const prevData=_this.myService.getData(host);const timeDiff=Math.abs(new Date().getTime()-new Date(prevData[0].dateAt).getTime());const minutes=Math.floor((timeDiff/1000)/60);返回分钟数;});
let rows = [1, 2, 3];

let f = (async row => {
  return row === "2";
});

(async () => {
  for (let i = 0; i < rows.length; i++) {
    let result = await f(rows[i]);
    console.log(result);
    if (!result)  {
      break;
    }
  }
})();