2017-03-26 5 views
0

我是新來的JS和異步...所以我需要幫助:) 我需要在串行通信後返回值。閱讀序列顯然需要功能,所以我不知道如何使它阻塞,或從它返回值...控制檯日誌顯示值,但價值不返回...(可能是因爲它在串行之前執行)。請幫忙。下面是部分代碼:如何在串行通信後返回值NodeJS

var LightController = { 
getBrightness: function() { //get brightness 
    port.write(askcommand); 
    port.on('data', function (data) { 
     st = data.slice(-4, -3); 
     this.brightness = st.readInt8(0); 
     console.log(this.brightness) 
    }); 
    return this.brightness; 
    },  

lightAccessory 
     .getService(Service.Lightbulb) 
     .addCharacteristic(Characteristic.Brightness) 
     .on('get', function(callback) { 
     callback(null, LightController.getBrightness()); 
     }); 

回答

0
var LightController = { 
// add callback to get brightness function 
getBrightness: function(brightnessCallback) { //get brightness 
    port.write(askcommand); 
    port.on('data', function (data) { 
     st = data.slice(-4, -3); 
     this.brightness = st.readInt8(0); 
     console.log(this.brightness) 
     // call callback for get brightness function 
     brightnessCallback(this.brightness); 
    }); 
    return this.brightness; 
    } 
} 

lightAccessory 
     .getService(Service.Lightbulb) 
     .addCharacteristic(Characteristic.Brightness) 
     .on('get', function(callback) { 
      // call the get brightness function, passing anonymous function as brightness callback 
      LightController.getBrightness(function(brightness){ 
      // call original callback with brightness 
      callback(null, brightness); 
      }) 
     }); 
+0

謝謝你!這樣可行!!! – MotoManiac