如何修复“类型'Promise <{}>'缺少'Observable <any>'类型的以下属性”

时间:2020-06-04 08:33:58

标签: javascript typescript

这是代码:

 const reportModules = [
      { url: '', params: { to: format(TODAY, DATE_FORMAT).toString(), from: format(TODAY, DATE_FORMAT).toString() } },
      {
        url: 'application1',
        params: { to: format(TODAY, DATE_FORMAT).toString(), from: format(TODAY, DATE_FORMAT).toString() }
      },
      {
        url: 'application2',
        params: {
          to: format(endOfWeek(TODAY), DATE_FORMAT).toString(),
          from: format(startOfWeek(TODAY), DATE_FORMAT).toString()
        }
      },
      {
        url: 'application3',
        params: {
          to: format(endOfWeek(TODAY), DATE_FORMAT).toString(),
          from: format(startOfWeek(TODAY), DATE_FORMAT).toString()
        }
      }
    ];

    const promises = reportModules.map(
  target =>
    new Promise(resolve => {
      this.notificationService
        .getSummary(target.url, target.params)
        .pipe(take(1))
        .subscribe(
          (result: Response) => {
            resolve({ target, result });
          },
          (err: Error) => {
            // return reject(err);
          }
        );
    })
);
        const observables: Observable<any>[] = promises;

        merge(...observables).subscribe((results) => { ... }

如何解决错误let observables: Observable<any>[] 'observables' is declared but its value is never read.ts(6133) Type 'Promise<{}>[]' is not assignable to type 'Observable<any>[]'. Type 'Promise<{}>' is missing the following properties from type 'Observable<any>': _isScalar, source, operator, lift, and 6 more.ts(2322)

我要在这里执行的操作是先加载第一个电话,然后加载第二个电话,直到承诺结束。

例如,它将在应用程序2之后调用第一个,即application1,它应该一个一个地调用它。

1 个答案:

答案 0 :(得分:1)

错误出现在代码的最后两行。您正在将应许列表分配给可观察对象列表。它们不是同一类型的对象。

最简单的解决方法是坚持Promises并使用Promise.all()而不是merge()。