//高阶函数,这个函数返回一个函数,返回的函数接收一个以三个函数属性的对象为参数。
function create(fn) {
let ret = false;
return ({ next, complete, error }) => {
function nextFn(...args) {
if (ret) {
return;
}
next(...args);
}
function completeFn(...args) {
complete(...args);
ret = true;
}
function errorFn(...args) {
error(...args);
}
fn({ next: nextFn, complete: completeFn, error: errorFn });
return () => (ret = true);
};
};
//创建函数,并把observer对象放入上面函数的变量作用域中。
let observerable = create(observer => {
setTimeout(() => {
observer.next(1);
}, 1000);
observer.next(2);
observer.complete(3);
});
const subject = {
next: value => {
console.log(value);
},
complete: console.log,
error: console.log
};
let unsubscribe = observerable(subject);