gpt4 book ai didi

node.js - RxJS:我如何将bindNodeCallback()视为可以将运算符链接到它的Observable?

转载 作者:太空宇宙 更新时间:2023-11-03 23:59:13 24 4
gpt4 key购买 nike

出于 RxJS 学习目的,我正在构建一个小型 Node.js 应用程序,尽可能将所有内容放入流中。

作为第一步,我正在加载外部配置 yaml 文件。我见过 fs.readFile 包装在 bindNodeCallback 中的示例,它在调用时返回一个 observable。但是,下面设置的 readFile 变量仍然是“function”的 typeof。因此,我无法将 flatMap 链接到它。

在初始化我的应用程序之前,如何重新组织下面的代码以链接 bindNodeCallback() 和 yaml.safeLoad() (不提供回调)?

const yaml = require('js-yaml');
const fs = require('fs');
const { bindNodeCallback, of } = require('rxjs');
const { mergeMap, map } = require('rxjs/operators');

const configPath = './config/config.yml';
const configEncoding = 'utf8';

const readFile = bindNodeCallback(fs.readFile);

readFile(configPath, configEncoding)
.flatMap(yamlString => of(yaml.safeLoad(yamlString))) // error: .flatMap is not a funciton
.subscribe(
config => {
console.log(config);
// launch the app when config is loaded
},
err => console.error(err)
);

最佳答案

readFile 应该仍然是一个函数,并且在执行时确实返回一个 Observable,但 flatMap 不是返回的 Observable 上的方法。如果您摆脱对 .flatMap() 的调用并直接跳转到 .subscribe(),那就可以了。

您是否尝试使用 rxjs/operators 中的 flatMap 或链接接口(interface)?

<小时/>

这可行,但由于某种原因我不得不yarn add rxjs-compat。另请注意,我改用 Observable#pipe()flatMap 作为可管道操作符。

const fs = require('fs')
const yaml = require('js-yaml')
const { bindNodeCallback } = require('rxjs')
const { flatMap } = require('rxjs/operators')
const { of } = require('rxjs/observable/of')

const configPath = './config.yml'
const configEncoding = 'utf8'

const readFile = bindNodeCallback(fs.readFile)

readFile(configPath, configEncoding)
.pipe(flatMap(yamlString => of(yaml.safeLoad(yamlString))))
.subscribe(
config => {
console.log(config)
},
err => console.error(err),
)

关于node.js - RxJS:我如何将bindNodeCallback()视为可以将运算符链接到它的Observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com