//高阶函数,这个函数返回一个函数,返回的函数接收一个以三个函数属性的对象为参数。
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);