1.0.1 • Published 2 years ago

nv-task-simple-loop v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

nv-task-simple-loop

  • simple reusable promise

install

  • npm install nv-task-simple-loop

usage

 const {creat_loop, creat_loop_ignore_error} = require("nv-task-simple-loop")

 

example

auto

    function tsk(RETURN,THROW,self) {
        setTimeout(
           ()=>{
               console.log(new Date,self.count);
               self.count = self.count +1;
               RETURN();
           },
           3000
        )
    }

    var loop = creat_loop("tmout",tsk);
    loop.count = 0;
    /*
    > loop
    _LoopStopIfError(3) [ 'tmout', [Function: tsk], false, count: 0 ]
    >
    */
    var p = loop.run()
    /*
    > 2022-05-14T11:09:46.697Z 0

    > 2022-05-14T11:09:49.703Z 1

    > 2022-05-14T11:09:52.715Z 2
    2022-05-14T11:09:55.724Z 3
    2022-05-14T11:09:58.729Z 4
    ....
    > loop.is_running()
    true

    > p
    Promise {
      <pending>,
      [Symbol(async_id_symbol)]: 88,
      [Symbol(trigger_async_id_symbol)]: 5,
      [Symbol(destroyed)]: { destroyed: false }
    }

    */

stop

    loop.stop();

    /*

    > loop
    _LoopStopIfError(3) [ 'tmout', [Function: tsk], false, count: 28 ]
    >
    > loop.is_running()
    false
    > p
    Promise {
      undefined,
      [Symbol(async_id_symbol)]: 88,
      [Symbol(trigger_async_id_symbol)]: 5,
      [Symbol(destroyed)]: { destroyed: false }
    }
    >
    */

manual

    loop.manual();
    await loop
    await loop
    await loop
    /*
    > await loop
    2022-05-14T11:55:22.102Z 28
    undefined
    > await loop
    2022-05-14T11:55:25.109Z 29
    undefined
    > await loop
    2022-05-14T11:55:28.117Z 30
    undefined
    >

    */

clone

    > loop.clone()
    _LoopStopIfError(3) [ 'tmout', [Function: tsk], false, count: 28 ]
    >

performance

    var loops = Array.from({length:10000}).map((r,i)=>creat_loop(`tsk${i}`,tsk))
    loops.forEach(loop=>loop.run())

    /*

    PID USER      PR  NI    VIRT    RES    SHR S   %CPU  %MEM     TIME+ COMMAND
    44014 root      20   0  701288 111544  33400 S  28.2  5.5   0:10.47 node


    */

METHODS

 loop.clone()                            
 loop.exec_                executor, cant change it when running  
 loop.is_running            
 loop.manual()             set-to-manual-mode   using await loop   for next                
 loop.name_                 
 loop.run()                   
 loop.stop()

APIS

    Handle: (RETURN:,THROW,self:Loop) => {}                 //RETURN is resolve , THROW is reject,  self is the Loop

    {
      ERRORS: Error(2) { 'already_running', 'not_running' },
      DFLT_EXEC: [AsyncFunction: DFLT_EXEC],
      DFLT_CLONE: [Function: DFLT_CLONE],
      creat_loop: [Function: creat_loop](name:String,executor:Handle),
      creat_loop_ignore_error: [Function: creat_loop_ignore_error](name:String,executor:Handle)
    }

LICENSE

  • ISC