小编low*_*ost的帖子

RxJS承诺组合(传递数据)

我是Rx的新手,我发现很难找到有关组成承诺的文档,以便第一个承诺的数据传递到第二个承诺,依此类推.这是三个非常基本的承诺,对数据的计算并不重要,只是必须使用先前承诺的数据来完成异步.

 const p1 = () => Promise.resolve(1);
 const p2 = x => { const val = x + 1; return Promise.resolve(val); };
 const p3 = x => {
      const isEven = x => x % 2 === 0;
      return Promise.resolve(isEven(x));
 };
Run Code Online (Sandbox Code Playgroud)

实现我正在谈论的构图的传统方式:

 pl().then(p2).then(p3).then(console.log);
Run Code Online (Sandbox Code Playgroud)

我最喜欢的实现是Ramda的composeP和pipeP:

R.pipeP(p1, p2, p3, console.log)()
Run Code Online (Sandbox Code Playgroud)

似乎Rx可能能够非常流利地处理这种情况.但是,到目前为止我发现的最接近的是从RxJS到async(库)比较,这里https://github.com/Reactive-Extensions/RxJS/blob/master/doc/mapping/async/comparing.md:

 var Rx = require('rx'),
     fs = require('fs'),
     path = require('path');
 var file = path.join(__dirname, 'file.txt'),
     dest = path.join(__dirname, 'file1.txt'),
     exists = Rx.Observable.fromCallback(fs.exists),
     rename = Rx.Observable.fromNodeCallback(fs.rename),
     stat = Rx.Observable.fromNodeCallback(fs.stat);
 exists(file) …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming frp rxjs ramda.js

16
推荐指数
1
解决办法
3万
查看次数

typescript类装饰器:在装饰器函数中定义的输入属性

bar是一个简单的类装饰器,它将属性添加到类Foo中.

function bar(target) {
    target.inDecorator = 'in decorator';
}

@bar
class Foo {
    inClass:string;
    inDecorator:string;
    constructor() {
        this.inClass = 'a string';
    }

    getInClass() {
        return this.inClass;
    }
}

console.log(Foo.inDecorator);
console.log(Foo.prototype.inDecorator);
const foo = new Foo();
console.log(foo.getInClass());
console.log(foo.inDecorator);
Run Code Online (Sandbox Code Playgroud)

导致错误的唯一控制台日志是第一个,Foo.inDecorator,包含在ts 1.5.3中的内容

Property 'inDecorator' does not exist on type 'typeof Foo'.
Run Code Online (Sandbox Code Playgroud)

据我所知,inDerator应该在Class Foo的原型上定义,并且应该在Foo上可用,就像它是静态道具一样.运行生成的js文件显示原型访问以及新foo对象的未定义,但是Foo.inDecorator即使它是错误的来源也能正确打印.更清楚的是,我们得到了

in decorator
undefined
a string
undefined
Run Code Online (Sandbox Code Playgroud)

关于如何正确输入/添加静态道具或方法的任何想法?

谢谢!

编辑这个,因为我最初忽略了原型访问,Foo.prototype.inDecorator无法正常工作的事实.

javascript class typeof decorator typescript

5
推荐指数
1
解决办法
2069
查看次数