0
一般來說,一旦容易使用once
即可監聽事件。收到與正則表達式匹配的消息後解除綁定事件
mySocket.once('connect',() => console.log('connected!'));
我想要做的是偵聽匹配正則表達式的數據。當收到匹配的數據時,我想解除綁定事件偵聽器並用消息解析。我找不到任何簡單的方法來做到這一點。最好,我想在函數的最後返回一個承諾這裏是我的嘗試之一:
listenOnce(regex) {
let listener;
let timeoutId;
return new Promise((resolve, reject) => {
timeoutId = setTimeout(() => reject(new Error('Timeout exceeded')), 60000);
listener = function (data, resolve, reject) {
if (regex.test(data.toString('ascii'))) {
resolve(data.toString('ascii'));
}
}.bind(this, resolve, reject);
this.socket.on('data', listener);
}).then(() => {
this.socket.removeListener('data', listener); // this doesn't work
clearTimeout(timeoutId);
});
}
「listener」的定義在哪裏?它在你的函數中似乎是'未定義的'。你用'regex'做什麼? – Bergi
我認爲你應該只是promisify'一次'方法,並承諾一切做其他事情。 – Bergi
看起來你正走向正確的道路。但是,您不會向我們展示「偵聽器」函數代碼,因此我們無法真正瞭解您可能在那裏做錯了什麼。到目前爲止你所嘗試的什麼不起作用?我看到的一件事是,如果你超時,你需要'removeListener()'。我也不清楚你是否在'.bind()'中綁定了正確的'this'值。 – jfriend00