0

我正在製作一個Chrome應用程序,它涉及到連接到幾個BLE外圍設備並同時向他們發送寫入消息。我需要知道每個寫操作何時完成了哪個外設,以便我可以爲該外設啓動更多操作,但似乎沒有辦法從回調函數中引用外設。如何找到由哪個外設寫回調被觸發?

chrome.bluetoothLowEnergy.writeCharacteristicValue(string characteristicId, ArrayBuffer value, function callback) 

The API表明READ回調函數有一個特性參數:

function(Characteristic result) {...}; 

而且我再被使用result.service.deviceAddress回調函數作爲參數傳遞給藍牙API寫函數傳遞找到回撥的設備。但WRITE回調沒有參數。

這給了我沒有辦法引用寫入的外設,所以我無法弄清楚哪個外設導致這個寫回調運行。我可以看到你可以通過爲每個固定數量的設備設置一個唯一的回調函數來做到這一點,但有人可以詳細說明如何使用單一回調函數更動態地執行此操作嗎?

回答

0

我最終加入了共享功能的回調(dDevice實例):

var writeCallback = function (d) { 
    //... 
} 

然後,在我的對象保持裝置的賽道,我加了屬性這一呼叫使用this功能:

class Device { 
    constructor(device) { 
    //... 
    this.writeCallbackLink = (function() { 
     writeCallback(this); 
    }).bind(this); 
    } 
} 

bind(this)是確保this是指實際的對象,而不是運行時環境是至關重要的。然後,當我調用API函數,我用的是回調鏈接:

chrome.bluetoothLowEnergy.writeCharacteristicValue(d.write.instanceId, 
    data_buffer, d.writeCallbackLink); 

這將導致writeCallback與觸發它作爲參數d運行。

相關問題