【问题标题】:JSBIN Project with RX.Js 5.0.0 Pulling 'Not Defined' Error带有 RX.Js 5.0.0 的 JSBIN 项目出现“未定义”错误
【发布时间】:2016-08-21 00:59:42
【问题描述】:

当我运行具有以下规范的新 JSBIN 项目时:

- 使用标签:JavaScript、控制台

- 添加库:RxJS 5.0.0

然后在JavaScript区运行如下代码块:

var observable = Rx.Observable.create(observer => {
  setInterval(() => {
    observer.onNext('This is the output of my async operation');
  }, 2000);
});

observable.subscribe(response => console.log(response));

上述代码应在控制台区域呈现以下输出:

"This is the output of my async operation"

两秒钟后,控制台区域应该得到渲染:

"This is the output of my async operation"

但是,我收到以下错误:

"error"
-----------------------------
"ReferenceError: Rx is not defined
    at yivicazake.js:3:4
    at https://static.jsbin.com/js/prod/runner-3.39.12.min.js:1:13926
    at https://static.jsbin.com/js/prod/runner-3.39.12.min.js:1:10855

这是我第一次使用 JSBIN 将 RxJS 作为库引入,我希望有人遇到过这个特殊错误。

【问题讨论】:

    标签: javascript rxjs5 jsbin


    【解决方案1】:

    我不确定你使用的是哪个确切版本的 Rxjs beta,我在这里创建了一个 jsbin,它对我来说工作正常 http://jsbin.com/henimevepa/edit?html,js,console,output

    这里的东西很少

    - instead of '.onNext' in version 5 its just '.next'
    - You need to subscribe to observer to run it.
    

    【讨论】:

    • 您好,感谢您的快速回复。我目前正在使用 RxJS 5.0.0-beta.7(网站上唯一可供我使用的版本)并且我已将 '.next' 更改为 'next' 并且我相信我的最后一行(observable.subscribe(...)是正确的,但我无法完全确认。您正在运行哪个测试版?
    • 我用的是同一个beta7,你能分享你的jsbin url吗?
    • 您的 jsbin 的问题是您将脚本文件附加到错误的位置,它必须在 head 标签或 body 标签中。您错误地将其附加到身体标签之外。请参阅 html 选项卡。
    • 谢谢,如果我只选择 JavaScript 和控制台选项卡,我没有意识到 HTML 选项卡正在被使用。我认为 JavaScript 只是容器或沙箱。我将 Rx 脚本引用移动到头部,而不是正文中。谢谢!帮了大忙!
    【解决方案2】:

    我也在学习 RxJS,这里有几点需要注意。现在仍然很容易混淆 RxJS v4 和 v5 文档,所以一些链接可以帮助您:

    v5 存储库是这个https://github.com/ReactiveX/RxJS。 /Reactive-Extensions/RxJS 适用于 v4。两者都仍然有用,所以如果您使用 v4 在线学习课程(有很多),migration docs 会有所帮助!

    这个manual 很有帮助,RxMarbles 也很有帮助。

    至于你的代码,试试这个:

    // create subscriber
    const createSubscriber = tag => ({
        next(item) { console.log(`${tag}.next ${item}`); },
        error(error) { console.log(`${tag}.error ${error.stack || error}`); },
        complete() { console.log(`${tag}.complete`); }
    });
    
    // interval
    Rx.Observable
        .interval(2000)
        .take(5)
        .subscribe(createSubscriber('This is the output of my async operation'));
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多