【问题标题】:Array.filter with asynchronous issueArray.filter 有异步问题
【发布时间】:2021-12-16 04:08:25
【问题描述】:

我通过异步调用 API 端来获取数据集。但是我的客户端方法返回可观察的。 所以我将它转换为 promise 并返回我的值。

 const statusTypes = ['paid','default','open'];
    const data: any = await this.reportService.getReport(payload).toPromise()
    const invoices = await this.getFilteredDataByStatusArray(data.invoices, statusTypes );
    const tempSelectedStaus = [...statusTypes ];
    const withoutOverdueStatus: any = await this.getNotOverdueList(tempSelectedStaus);
//some code here

这是代码中的getNotOverdueList方法,

async getNotOverdueList(arrayData) {
    return await new Promise((resolve, reject) => {
      try {
        return resolve(arrayData.filter(s => s !== 'Overdue'));
      } catch (err) {
        this.logger.error(err);
        return [];
      }

    });
  }

之后我的代码中的代码行很少,但是在执行此方法 getNotOverdueList 时这些行没有执行。此方法执行后返回。

你知道为什么会这样吗?

【问题讨论】:

    标签: angular typescript async-await


    【解决方案1】:

    您似乎在一个函数编写中将异步版本和承诺版本混合在一起。

    promise 版本是一个返回由resolvereject 驱动的promise 的函数。

    function getNotOverdueList(arrayData) {
      return new Promise((resolve, reject) => {
        try {
          return resolve(arrayData.filter(s => s !== 'Overdue'));
        } catch (err) {
          this.logger.error(err);
          return resolve([]);   // or reject(err)
        }
      })
    }
    

    异步版本是由returnthrow驱动的返回值的函数。

    async function getNotOverdueList(arrayData) {
      try {
        return arrayData.filter(s => s !== 'Overdue');
      } catch (err) {
        this.logger.error(err);
        return []   // or throw err
      }
    }
    

    两个版本都可以通过getNotOverdueList(...).then(res) 调用。在 async 函数内部时,可以使用 await getNotOverdueList(...) 调用异步版本。

    【讨论】:

    • 非常感谢您的回复。但仍然有同样的问题。在您的代码中,过滤器功能是同步的吗?所以如果我们将 getNotOverdueList 转换为异步的,我认为是没用的。
    • 如果filter 是异步的,则在异步版本中执行return await arrayData.filter(...)
    • 表示'await'在加入await后对这个表达式的类型没有影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2017-12-31
    • 1970-01-01
    • 2010-12-16
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多