簡體   English   中英

回調事件監聽器

[英]Callback Eventlistener

我是Node的新手,我在繞回調問題時有些麻煩。

我正在嘗試使用單個函數來打開或關閉組件的連接,具體取決於它的當前狀態。

if(state){
   component.open(function(){
       component.isOpen(); //TRUE
   });
}
else{
    component.isOpen(); //Always false 
    component.close(); //Results in error, due to port not being open
}

基本上,我試圖等待一段不確定的時間再關閉連接,並且我想使用單數切換功能將其關閉。 從我所看到的,保證端口打開的唯一方法是在回調內部。 有沒有辦法讓回調監聽發生的某種事件? 還是在回調中接受輸入的其他一些常規做法?

回調應該被調用一次,而事件可以多次按需調用方法,所以您的用例在我看來就像您想按需打開和關閉連接一樣,也可以多次...

為此,最好使用EventEmitter ,它是nodejs的一部分,並且確實易於使用。

例如:

var EventEmitter = require('events').EventEmitter;

var myEventEmitter = new EventEmitter();
myEventEmitter.on('toggleComponentConnection', function () {
   if (component.isOpen()) {
      component.close();
   }
   else {
      component.open(function(){
         component.isOpen(); //TRUE
      });
   }
});

...
// Emit your toggle event at whatever time your application needs it
myEventEmitter.emit('toggleComponentConnection');

否則,如果您選擇使用回調,則需要牢記函數作用域和javascript 閉包

function toggleComponentConnection(callback) {
   if (component.isOpen()) {
       component.close(function () {
          callback();
       });
   }
   else {
      component.open(function(){
         component.isOpen(); //TRUE
         callback();
      });
   }
}

...
// Call your toggle function at whatever time your application needs it
toggleComponentConnection(function () {
   component.isOpen();

   // make sure your application code continues from this scope...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM