首页 > 解决方案 > 在 Angular9 中的“window.alert”之后无法退出该功能

问题描述

我正在尝试计算时差,如果时差大于 20 分钟,我想显示一个alert message然后退出。我不打算遍历所有的rows并想在找出第一个主机后退出该功能minutes < 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;
            }
        });

我正在尝试使用退出函数,return false但它仍在循环所有行。

更新的代码没有foreach

    const f = (async row => {
        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);
        return minutes;
    });

    (async () => {
        for (let i = 0; i < this.dataSource.filteredData.length; i++) {
            const mins = await f(this.dataSource.filteredData[i]);
            if (mins < 200) {
                window.alert('Please retry after ' + (200 - mins) + ' minutes.');
                break;
            }
        }
    })();

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

标签: javascriptangulartypescriptasync-awaitalert

解决方案


这是控件应如何编程的最小可行表示:

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;
    }
  }
})();

推荐阅读