【问题标题】:Angular 5 rxjs 5.5.2 - import of interval error - "Cannot read property 'call' of undefined"Angular 5 rxjs 5.5.2 - 导入间隔错误 - “无法读取未定义的属性‘调用’”
【发布时间】:2018-06-26 16:09:54
【问题描述】:

我在尝试导入“间隔”时收到错误“无法读取未定义的属性‘调用’”

我的进口是:

import { Observable } from 'rxjs/Observable';   
import 'rxjs/add/observable/merge';   
import 'rxjs/add/observable/of';   
import 'rxjs/add/operator/catch';   
import 'rxjs/add/operator/map';   
import 'rxjs/add/operator/startWith';   
import 'rxjs/add/operator/switchMap';   
import 'rxjs/add/operator/debounceTime';   
import 'rxjs/add/observable/interval';

如果我删除最后一次导入,它可以正常工作。

我在控制台中有这个错误

未捕获的类型错误:无法读取未定义的属性“调用” 在 webpack_require (inline.bundle.js:55) 在评估(home.component.ts:12) 在对象.../../../../../src/app/home/home.component.ts (main.bundle.js:134) 在 webpack_require (inline.bundle.js:55) 在评估(app.module.ts:23) 在对象.../../../../../src/app/app.module.ts (main.bundle.js:52) 在 webpack_require (inline.bundle.js:55) 在评估(main.ts:4) 在对象.../../../../../src/main.ts (main.bundle.js:394) 在 webpack_require (inline.bundle.js:55) webpack_require @ inline.bundle.js:55(匿名)@home.component.ts:12 ../../../../../src/app/home/home。组件.ts @ main.bundle.js:134 webpack_require @ inline.bundle.js:55 (匿名) @ app.module.ts:23 ../../../../../src/app/app.module。 ts@ main.bundle.js:52 webpack_require @ inline.bundle.js:55 (匿名) @ main.ts:4 ../../../../../src/main.ts @ main.bundle。 js:394 webpack_require @ inline.bundle.js:55 0 @ main.bundle.js:409 webpack_require@inline.bundle.js:55 webpackJsonpCallback@inline.bundle.js:26(匿名)@main.bundle.js:1

更新 我认为问题可能在于使用间隔?我尝试如下使用计时器并且它有效。

import { timer } from 'rxjs/observable/timer';  

var numbers = timer(5000);
numbers.subscribe(x => console.log(x));

但这会产生“无法读取未定义的属性'调用'”

import { interval } from 'rxjs/observable/interval';

var numbers = interval(1000);
numbers.subscribe(x => console.log(x));

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    Pipeable 运算符是导入和使用 rxjs 运算符的新的首选方式。如需更多信息,请查看rxjs docs

    import { map, filter, scan } from 'rxjs/operators';
    source$.pipe(
      filter(x => x % 2 === 0),
      map(x => x + x),
      scan((acc, x) => acc + x, 0)
    )
    

    其他操作符(例如创建 Observables)可以直接导入使用:

    import { combineLatest } from 'rxjs/observable/combineLatest';
    
    combineLatest(this.first$, this.second$, (first, second) => ({first, second}))
    

    【讨论】:

    • 你能分享一个使用间隔的代码sn-p吗?我尝试从 'rxjs/observable/interval' 导入 { 间隔 };然后让 tick = interval(1000) 我得到“无法读取未定义的属性调用”
    • 我创建了一个 stackblitz,它显示它的工作原理就是这样。肯定有其他问题。 angular-lpmrtd.stackblitz.io
    • 也许尝试使用 npm updatenpm outdated 更新您的依赖项以查看可能的重大更新,这可能是您的某些库中的错误。
    猜你喜欢
    • 2019-02-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2018-08-29
    • 2018-08-07
    • 2018-10-29
    相关资源
    最近更新 更多