2016-10-13 1 views
1

関数は、現在のダニ(関数が宣言されたダニ)、または次のダニに呼び出されたかどうかを知るのいくつかのきちんとした方法があるかどうか、私は疑問に思って(またはいくつか例えばNode.jsのイベントループのJavaScript/Node.jsのイベントループダニIDS

の未来チック):

function foo(cb){ 

    // we can fire callback synchronously 
    cb(); 

    // or we can fire callback asynchronously 
    process.nextTick(cb); 

} 

はそうのようなFOOを呼び出すと言う:

function outer(){ 

    const currentTickId = process.currentTickId; 

    function bar(){   //bar gets created everytime outer is called.. 

    if(process.currentTickId === currentTickId){ 
     //do something 
    } 
    else{ 

    // do something else 
    } 


    } 


    foo(bar); //foo is always called in the same tick that bar was declared, but bar might not be called until the next tick 


} 

ほとんどのアプリケーションはこのような何かを必要としませんが、I李を書いている可能であれば、この機能を持たせると便利です! process.currentTickIdは、この例ですでにprocess.nextTickを発見したように見えます

+0

私はそれが「可能」だと思う:

あなたの質問のコードが必要示しとして「process.currentTickId」を達成するためにリグアップシステムにこれを使用することができます/ package/tick-id –

+0

通常、常にコールバックを非同期的に起動するのがベストプラクティスですが、これは単なる実例です。 –

答えて

1

のために私によって作られていることに注意してください。 https://www.npmjs.com -

process.currentTickId = 0; 

const onTick =() => { 
    process.currentTickId++; 
    process.nextTick(onTick); 
}; 

process.nextTick(onTick); 
+0

あなたが欠けているのは、devsによって使用されるライブラリのためです。私はそれだけで私のコードにその彼らではないですが、彼らは同期APIを呼び出すことができるようにしたいが、彼らはnextTickでAPIを呼び出す場合、エラーを警告するか、投げるので、私は単に彼らが同期または非同期コードを使用するときを制御できません。 –