javascript - 使用 Javascript 运行 Observable

标签 javascript node.js observable

我正在尝试将 Observable 与常规 Javascript 一起使用。 按照这里的说明进行操作: https://www.npmjs.com/package/rxjs

这是顺序 - 不确定问题是什么:

    npm install rxjs
    npm WARN <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6f1b0a1c1b2f5e415f415f" rel="noreferrer noopener nofollow">[email protected]</a> No description
    npm WARN <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e296879196a2d3ccd2ccd2" rel="noreferrer noopener nofollow">[email protected]</a> No repository field.

    + <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bbc9c3d1c8fb8d958f958b" rel="noreferrer noopener nofollow">[email protected]</a>
    removed 13 packages, updated 1 package and audited 2 packages in 3.163s
    found 0 vulnerabilities

    ------------------------------------------------------------
    » cat package.json                                                                                                                                                                
        {
          "name": "test",
          "version": "1.0.0",
          "description": "",
          "main": "counter.js",
          "dependencies": {
            "rxjs": "^6.4.0"
          },
          "devDependencies": {},
          "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1"
          },
          "keywords": [],
          "author": "",
          "license": "ISC"
        }

    ------------------------------------------------------------
    » cat obs.js  
      import { range } from 'rxjs';
      import { map, filter } from 'rxjs/operators';

      range(1, 200).pipe(
        filter(x => x % 2 === 1),
        map(x => x + x)
      ).subscribe(x => console.log(x));
    ------------------------------------------------------------
    » node obs.js                                                                                                                                                                     
        obs.js:1
        (function (exports, require, module, __filename, __dirname) { import { range } from 'rxjs';

        SyntaxError: Unexpected token {
            at new Script (vm.js:79:7)
            at createScript (vm.js:251:10)
            at Object.runInThisContext (vm.js:303:10)
            at Module._compile (internal/modules/cjs/loader.js:656:28)
            at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
            at Module.load (internal/modules/cjs/loader.js:598:32)
            at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
            at Function.Module._load (internal/modules/cjs/loader.js:529:3)
enter code here            at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
            at startup (internal/bootstrap/node.js:285:19)
------------------------------------------------------------

最佳答案

模块导入与 RxJS 包一起工作的方式出现了令人沮丧的错误。每当使用 import * as rxjs from "rxjs" 导入时,所有导出的功能都会附加到 rxjsdefault 属性。然后,您必须从该属性而不是 rxjs 本身来解构它们。例如,如果您使用以下命令,这应该可以工作:

命令(注意 .mjs 扩展名):

node --experimental-modules obs.mjs

代码:

import * as rxjs from 'rxjs';
const {range} = rxjs.default;
console.log(typeof range);

您也可以不使用模块,而只使用 require 语句:

命令(注意.mjs扩展名):

node obs.js

代码:

const { range } = require("rxjs");
const { map, filter } = require("rxjs/operators");

range(1, 200).pipe(
    filter(x => x % 2 === 1),
    map(x => x + x)
).subscribe(x => console.log(x));

另请考虑 GitHub 上的此问题 Provide named exports #3745

关于javascript - 使用 Javascript 运行 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54519316/

相关文章:

php - 追加多维数组形成数据

node.js - 打开 chrome-devtools ://URL from script/command line, 不是通过复制粘贴

f# - 什么是由 Observable.merge<'T> 不是线程安全引起的意外后果的例子?

javascript - 分解字符串并在每个单词后换行

javascript - 如何判断属性是否存在且为假

node.js - NPM 中的 JavaScript 堆内存不足

javascript - 使用nodejs fs 模块将路径添加到文件名中?

javascript - 如何在多个订阅变量一起调用时只调用一次函数

javascript - 如何在 rxjs 中链接可观察量

javascript - 状态未使用 React redux thunk 更新