javascript - 使用 Javascript 运行 Observable
问题描述
我正在尝试将 Observable 与常规 Javascript 一起使用。遵循此处的说明: https ://www.npmjs.com/package/rxjs
这是顺序 - 不确定是什么问题:
npm install rxjs
npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.
+ rxjs@6.4.0
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"
所有导出的功能被导入时,都将附加default
到rxjs
. 然后,您必须从该属性而不是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 上的这个问题提供命名导出 #3745
推荐阅读
- cmake - Find_library 使用不同版本的 cmake 失败
- java - Java继承与实现
- c - C99 递归矩阵乘法。如何访问索引?
- c# - 如何根据断言方法结果 webdriver C# 通过或失败测试?
- javascript - 使用 vanilla javascript 在引导模型中显示来自输入和选择字段的信息
- mysql - 数据过多时元查询不返回任何内容
- c# - 在 SpecFlow 3 生命周期挂钩中使用 SimpleInjector 范围
- ios - 打开 Gmail/SuperHuman 消息的链接
- javascript - Phaser 3:将游戏缩放到完整的网站宽度和高度
- ftp - 仅使用 wget 下载文本文件