2
我正在嘗試創建一個具有未來的功能。在此功能中,它將等待End
或Error
事件。如果沒有數據寫入x秒,它將返回一個錯誤。這是我寫的。如何用超時和監聽器創建未來
Cylon.execute = function (subroutine, timeout=60000) {
let future = new Future();
let done = future.resolver();
let timeoutId = Meteor.setTimeout(function() {
done(new Meteor.Error('CylonTimeout'));
});
this._messages.on('data',() => {
timeoutId = Meteor.setTimeout(function() {
done(new Meteor.Error('CylonTimeout'));
});
});
this.on('End',() => {
Meteor.clearTimeout(timeoutId);
done(null, subroutine);
})
this.on('Error', (err) => {
Meteor.clearTimeout(timeoutId)
done(err, null)
});
this._commands.write(`Execute #${subroutine}\r`, 'utf8');
return future.wait();
}
我遇到了一些問題。
- 當未來的回報,該事件偵聽器仍結合
- 未來可以因爲超時
這是如何通常與期貨的處理返回多次?有沒有辦法清理這些事件?
啊,'一次'是非常有幫助的!謝謝你好先生 – corvid
曾經會阻止同一個事件的多次處理,但是如果觸發不同的事件,你仍然會得到多個調用,所以你也必須按照我原來寫的那樣做事件監聽器清理。 – sagie
我唯一的其他問題是處理超時。我無法找到指定「僅從一系列期貨中返回一個未來」的API API中的任何內容(以先到者爲準) – corvid