Существует ли общий механизм для тайм-аута событий в node.js? - PullRequest
6 голосов
/ 28 сентября 2010

Я изучаю node.js, и большинство примеров, которые я могу найти, имеют дело с простыми примерами.Меня больше интересует создание сложных систем реального мира и оценка того, насколько хорошо модель node.js на основе событий может обрабатывать все варианты использования реального приложения.

Один из распространенных шаблонов, которые я хочу применить, - эторазрешить блокирование выполнения до истечения времени ожидания, если оно не произошло в течение определенного времени ожидания.Например, если для выполнения запроса к базе данных требуется более 30 секунд, это может быть слишком много для определенного приложения.Или, если чтение файла занимает более 10 секунд.

Для меня идеальный поток программ с таймаутами был бы аналогичен потоку программ с исключениями.Если событие не происходит в пределах определенного предопределенного предела времени ожидания, то прослушиватель событий будет очищен из цикла событий, и вместо этого будет сгенерировано событие времени ожидания.Это событие тайм-аута будет иметь альтернативного слушателя.Если событие обрабатывается нормально, то и прослушиватель тайм-аута, и прослушиватель событий очищаются от цикла событий.

Существует ли общий механизм для обработки тайм-аута и очистки процессов с тайм-аутом?Я знаю, что некоторые типы, такие как сокет, имеют параметр времени ожидания, но это не общий механизм, который применяется ко всем событиям.

1 Ответ

1 голос
/ 28 сентября 2010

На данный момент ничего подобного нет (о чем я знаю, но я не все знаю).

Единственное, о чем я могу думать, это то, что вы как-то сами его сбросили.Я привел пример ниже, но я думаю, что у него могут быть некоторые проблемы.Должен быть решаемым, хотя.

var to
function cb() {
    clearTimeout(to)
    // do stuff
}
function cbcb() {
    cb()
}
function cancel() {
    cb = function() {} // notice empty
}
fs.doSomethingAsync(file, cbcb)
to = setTimeout(cancel, 10000)
...