рд╣реВрдб рдХреЗ рдиреАрдЪреЗ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ / рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдпреБрдХреНрдд рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░реЗрдВ

рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╣реБрдд рд╢реМрдХреАрди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рдФрд░ рджрд░реНрдж рдирд╣реАрдВ рд▓рд╛рддреЗ рд╣реИрдВ, рдЙрдирдХреА рд╕реНрдерд┐рд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рд╡рд╛рд╕рдмреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдврд╛рдВрдЪрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдорд┐рдд рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдмреЗрдЪрддреА рд╣реИ, рдЬреЛ рдХреНрд▓рд╛рдЙрдб рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ рдХрд╕рдХрд░ рдХреИрд▓реЗрдВрдбрд░ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЙрддреНрдкрд╛рдж рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдЕрдХреНрд╖рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╣рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЗрдирдХреАрдВрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдФрд░ рдХреЗ рд▓рд┐рдП рдореЛрдЪрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд╛рдп рдЬрд╝реЛрд░рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯред рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрд╣рд╛рдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд┐рдЧрд░рд╛рдиреА рдиреЗ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдЙрдирдХреЗ рдкрддрди рдХреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рдЖрдзреЗ рдЕрд╕реНрдерд┐рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдХрд╛рд░рдг рдереЗред рд▓рдХреНрд╖рдг рд╕рдорд╛рди рд╣реИрдВ: рд╕реЗрдЯ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдФрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЗрд╕ рддрдереНрдп рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬрд┐рд╕рдореЗрдВ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдпрд╛ рд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдХреЛрдб рдХреНрд░реИрд╢ рдореЗрдВ рдХреЙрд▓ рд╣реЛрддреЗ рд╣реИрдВ ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдЖрдЧреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред


рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ?


рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реИ, рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдмрджрд▓рддреА рд╣реИред рдФрд░ рдкрд░реАрдХреНрд╖рдг рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдерд┐рддрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЬрдмрд╕реЗ рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреБрджреНрдз рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛ред рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдХреЛрдб рдПрдХ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ:


export class Foo {
  propToTest: boolean = false;
  methodToTest(): void {
    setTimeout(() => {
      this.propToTest = true;
    }, 100);
  }
}

? , setTimeout . c , (, 101 100 ). :


it('should set propToTest to true', (done: Function) => {
  const inst = new Foo();
  inst.methodToTest();
  setTimeout(() => {
    assert.isTrue(inst.propToTest);
    done();
  }, 101);
});

? , , .. , callback, setTimeout, . тАФ , 2 , . , . -, . , , - , тАФ -.
setInterval.



, . , . , , .


  1. callback- , setTimeout/setInterval (" 1001 101, "). .
  2. setTimeout() (" event loop, "). .
  3. ( 1 2) тАФ , , .

?


, , . , , : . .


  1. тАФ .. .
    , , :


    export function setProperState(inst: Foo) {
      inst.propToTest = true;
    }
    
    export class Foo {
      propToTest: boolean = false;
      methodToTest(): void {
        setTimeout(() => {
          setProperState(this);
        }, 100);
      }
    }

    :


    it('should set propToTest to true', () => {
      const inst = new Foo();
      assert.isFalse(inst.propToTest);
      setProperState(inst);
      assert.isTrue(inst.propToTest);
    });

    , setProperState methodToTest ( ). , : , . , , .


  2. , , .
    , setTimeout :


    export class Foo {
      propToTest: boolean = false;
      constructor(readonly awaiter: Function = setTimeout) {
      }
      methodToTest(): void {
        this.awaiter(() => {
          this.propToTest = true;
        }, 100);
      }
    }

    -, :


    it('should set propToTest to true', () => {
      const awaiter = (callback) => callback();
      const inst = new Foo(awaiter);
      inst.methodToTest();
      assert.isTrue(inst.propToTest);
    });

  3. , Promise.
    , тАФ , . . . :


    export class Foo {
      propToTest: boolean = false;
      methodToTest(): Promise<void> {
        return new Promise((resolve) => {
          setTimeout(() => {
            this.propToTest = true;
            resolve();
          }, 100);
         });
      }
    }

    setTimeout:


    it('should set propToTest to true', () => {
      const inst = newFoo();
      return inst.methodToTest().then(() => {
        assert.isTrue(inst.propToTest);
      });
    });

    , , , " ". setTimeout , .


    export class Foo {
      propToTest: boolean = false;
      constructor(readonly asyncTimeout: number = 100) {
      }
      methodToTest(): void {
        return new Promise((resolve) => {
          setTimeout(() => {
            this.propToTest = true;
            resolve();
          }, this.asyncTimeout);
         });
      }
    }

    .


  4. fake timers.
    Sinon.JS , . - ( ), setTimeout .
    :


    export class Foo {
      propToTest: boolean = false;
      methodToTest(): void {
        setTimeout(() => {
          this.propToTest = true;
        }, 100);
      }
    }

    fake timer, (!):


    let clock;
    
    beforeEach(() => {
      clock = sinon.useFakeTimers();
    });
    
    afterEach(() => {
      clock.restore();
    });
    
    it('should set propToTest to true', () => {
      const inst = newFoo();
      inst.methodToTest();
      clock.tick(101);
      assert.isTrue(inst.propToTest);
    });

    " " clock.restore(), .




- , . - , . , , .


All Articles