工作收获日志 2017-09-20
描述:
工作任务没有多少的时候记录的日志, 随便看看各种node,rxjs之类的内容,随手记录一下遇到的有用的东西,内容之间没有必然的关联。
使用webpack配合babel来进行打包生成node程序的时候,注意一定要在webpack的config里面指定编译的目标环境为node, 否则编译的时候一些node环境下必须的环境变量无法访问导致错误,如:
// With 'target' attribute unassigned, // These following code will have problem. console.log(`stdin: ${typeof process.stdin}`); // Output is `stdin: undefined` // In webpack.config.js, add following configuration: module.exports = { // other configs.. target: 'node', // other configs }; // After this configuration, you can use following code: process.stdin.addListener( 'data', value => console.log(`input: ${value}`) ); // Then in console: this is a input phase \n // You will receive: input: this is a input phase
RxJS 的merge方法
从RxJS的官网上可以知道,这个operator的方法是把几个相互之间没有关系的Observable(假设为a,b,c)合并,生成一个新的Observable流(假设为Combine)。a,b,c任意一个Observable产生了数据都会传递给Combine,之后再传递给订阅了Combine的subscribe函数来进行对应的处理。
一个简单的例子// import necessary libs. // Note in Node import is not supported. // You need to introduce webpack and babel es2015 // to compile the following code import Rx from 'rxjs'; import Events from 'events'; // Here we have two Observable created by timer const timer1 = Rx.Observable .timer(0, 1000).mapTo({ value: 'input from timer1' }); const timer2 = Rx.Observable .timer(0, 4000).mapTo({ value: 'input from timer2' }); // Here we create a new observable that will be triggered // Whenevent we input something on the console const inputEmitter = new Events.EventEmitter(); // Register system input process.stdin.addListener( 'data', value => inputEmitter.emit('input', { value }) ); // Create Observable from event const input = Rx.Observable.fromEvent( inputEmitter, 'input' ); // Create a new Observable stream that merge them Rx.Observable.merge(timer1, timer2, input) .subscribe(e => console.log(`trigger: ${e.value}`));
webpack编译运行后结果如下
// After 1 second trigger: input from timer1 // After another 3 second trigger: input from timer2 // Then we input a string from CLI this is a test input // Then we immediately have trigger: this is a test input