我怎样才能让 rxjs-spy 的 let 运算符工作?
How can I make rxjs-spy's let operator work?
如何使用 rxjs-spy's let() 方法 多次 次更改可观察值的值?
我正在关注该工具的 this introduction,当我想到使用 let() 的示例时:
spy.let("people", source => source.mapTo("mallory"));
我被卡住了,因为 source
是一个 Observable<any>
,它没有 mapTo()
方法。因此,当粘贴到我的 chrome 控制台时,这一行应该 正常工作 但由于 mapTo() 早已不复存在,它会引发异常。
我唯一能想到的方法没有用。这允许我访问 rxjs 运算符
// In a top level typescript file (I add this file to debug builds only)
// This just lets me use rxjs operators, of, and tag, in the chrome console
import { tag } from 'rxjs-spy/operators/tag';
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = {
rxjs: { operators, of },
spy: { tag }
};
const spy = create();
然后我在某处有一个 observable
myObservable.pipe(
tag("foo")
)
并在 chrome 控制台中。 (注意:我也尝试过不使用管道和标签)
spy.let("foo", fooObservable => window.debug.rxjs
.of(1)
.pipe(
window.debug.spy.tag("foo")
)
);
这仅在我第一次尝试更新值时有效。而且我觉得这工作量太大了。
我不理解的最后一个问题是在使用 spy.let(...)
之后,我认为 spy.undo(1)
(将 1 替换为当时正确的任何值)可能会帮助我测试多个值但它炸毁了快照,给我这样的东西:
spy.show()
0 snapshot(s) matching /.+/
我在使用该工具时也经常收到此警告
index.js:3551 Cyclic next detected; type = subject; value = [object Object]; subscribed at
Observable._subscribe (http://localhost:4200/vendor.js:291983:33)
Observable.subscribe (http://localhost:4200/vendor.js:291934:22)
http://localhost:4200/vendor.js:291217:44
notify_ (http://localhost:4200/vendor.js:291076:9)
明白了——我只是错过了 complete
选项。问题似乎是因为 let()
默认 complete
为 true
。
所以我仍然有一个在调试版本中使用的文件。这允许我在 chrome 控制台中使用 rxjs 运算符:
// import { tag } from 'rxjs-spy/operators/tag'; You shouldn't need this in the console.
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = { rxjs: { operators, of } };
const spy = create();
然后在控制台中我将完整选项设置为 false
。根据您的操作,这可能不适用,但我想继续手动更新值以查看更改结果。
// Add { complete: false } to the parameter list.
spy.let("foo", fooObservable => window.debug.rxjs.of(8), { complete: false });
如何使用 rxjs-spy's let() 方法 多次 次更改可观察值的值?
我正在关注该工具的 this introduction,当我想到使用 let() 的示例时:
spy.let("people", source => source.mapTo("mallory"));
我被卡住了,因为 source
是一个 Observable<any>
,它没有 mapTo()
方法。因此,当粘贴到我的 chrome 控制台时,这一行应该 正常工作 但由于 mapTo() 早已不复存在,它会引发异常。
我唯一能想到的方法没有用。这允许我访问 rxjs 运算符
// In a top level typescript file (I add this file to debug builds only)
// This just lets me use rxjs operators, of, and tag, in the chrome console
import { tag } from 'rxjs-spy/operators/tag';
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = {
rxjs: { operators, of },
spy: { tag }
};
const spy = create();
然后我在某处有一个 observable
myObservable.pipe(
tag("foo")
)
并在 chrome 控制台中。 (注意:我也尝试过不使用管道和标签)
spy.let("foo", fooObservable => window.debug.rxjs
.of(1)
.pipe(
window.debug.spy.tag("foo")
)
);
这仅在我第一次尝试更新值时有效。而且我觉得这工作量太大了。
我不理解的最后一个问题是在使用 spy.let(...)
之后,我认为 spy.undo(1)
(将 1 替换为当时正确的任何值)可能会帮助我测试多个值但它炸毁了快照,给我这样的东西:
spy.show()
0 snapshot(s) matching /.+/
我在使用该工具时也经常收到此警告
index.js:3551 Cyclic next detected; type = subject; value = [object Object]; subscribed at
Observable._subscribe (http://localhost:4200/vendor.js:291983:33)
Observable.subscribe (http://localhost:4200/vendor.js:291934:22)
http://localhost:4200/vendor.js:291217:44
notify_ (http://localhost:4200/vendor.js:291076:9)
明白了——我只是错过了 complete
选项。问题似乎是因为 let()
默认 complete
为 true
。
所以我仍然有一个在调试版本中使用的文件。这允许我在 chrome 控制台中使用 rxjs 运算符:
// import { tag } from 'rxjs-spy/operators/tag'; You shouldn't need this in the console.
import { create } from 'rxjs-spy';
import * as operators from 'rxjs/operators';
import { of } from 'rxjs/observable/of';
window['debug'] = { rxjs: { operators, of } };
const spy = create();
然后在控制台中我将完整选项设置为 false
。根据您的操作,这可能不适用,但我想继续手动更新值以查看更改结果。
// Add { complete: false } to the parameter list.
spy.let("foo", fooObservable => window.debug.rxjs.of(8), { complete: false });