Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将自定义运算符添加到可观察类_Javascript_Rxjs5 - Fatal编程技术网

Javascript 无法将自定义运算符添加到可观察类

Javascript 无法将自定义运算符添加到可观察类,javascript,rxjs5,Javascript,Rxjs5,我正在编写一个自定义操作符来加载csv文件并将每一行作为数据发出。这个操作符应该像操作符的一样工作,这是一个创建可观察对象的静态函数。我按照的指示,将操作符函数直接添加到可观察的原型中 以下所有代码都是用JavaScript ES6编写的。 我的源代码是 import { Observable } from 'rxjs'; import { createInterface } from 'readline'; import { createReadStream } from 'fs'; fun

我正在编写一个自定义操作符来加载csv文件并将每一行作为数据发出。这个操作符应该像操作符的
一样工作,这是一个创建可观察对象的静态函数。我按照的指示,将操作符函数直接添加到可观察的原型中

以下所有代码都是用JavaScript ES6编写的。

我的源代码是

import { Observable } from 'rxjs';
import { createInterface } from 'readline';
import { createReadStream } from 'fs';

function fromCSV(path, options) {

  return Observable.create((subscriber) => {
    let readStream = createReadStream(path);
    let reader = createInterface({ input: readStream });
    let isHeader = true;
    let columns;

    reader.on('line', (line) => {
      if (isHeader) {
        columns = line.split(',');
        isHeader = false;
      } else {
        let values = line.split(',');
        let valueObject = {};

        for (let i = 0, n = columns.length; i < n; i++) {
          valueObject[columns[i]] = values[i] || undefined;
        }

        subscriber.next(valueObject);
      }
    });

    reader.on('close', () => subscriber.complete());
    readStream.on('error', (error) => subscriber.error(error));
  });
}

Observable.prototype.fromCSV = fromCSV;
它抛出一个错误
TypeError:_rxjs.Observable.fromCSV不是一个函数
。所以函数绑定失败了,我不知道为什么会发生:-(非常感谢您的帮助


这让我特别困惑,因为我已经成功地为做了类似的运算符绑定。

问题是TypeScript不知道该运算符,因为它在RxJS的
*.d.ts
中找不到它

看看默认RxJS操作符是如何完成的:

在这种情况下,您只需要
declare模块…
部分,该部分具有指向可观察定义的正确路径。例如:

function fromCSV(path, options) {
  ...
}

Observable.prototype.fromCSV = fromCSV;

declare module 'rxjs/Observable' {
  interface Observable<T> {
    fromCSV: typeof fromCSV;
  }
}
来自CSV的函数(路径、选项){ ... } Observable.prototype.fromCSV=fromCSV; 声明模块“rxjs/Observable”{ 可观测界面{ fromCSV:fromCSV的类型; } }
问题是TypeScript不知道操作符,因为它在RxJS的
*.d.ts
中找不到它

看看默认RxJS操作符是如何完成的:

在这种情况下,您只需要
declare模块…
部分,该部分具有指向可观察定义的正确路径。例如:

function fromCSV(path, options) {
  ...
}

Observable.prototype.fromCSV = fromCSV;

declare module 'rxjs/Observable' {
  interface Observable<T> {
    fromCSV: typeof fromCSV;
  }
}
来自CSV的函数(路径、选项){ ... } Observable.prototype.fromCSV=fromCSV; 声明模块“rxjs/Observable”{ 可观测界面{ fromCSV:fromCSV的类型; } }
事实证明,我使用了错误的方法添加静态函数。有关更多信息,请参阅

要将静态函数添加到
Observable
类中,代码需要

Observable.fromCSV = fromCSV;

将函数添加到类的原型中只会使其在新建该类后可用。

结果表明,我使用了错误的方法添加静态函数。有关更多信息,请参阅

要将静态函数添加到
Observable
类中,代码需要

Observable.fromCSV = fromCSV;
将函数添加到类的原型将使其仅在更新该类后可用