【问题标题】:How wait between events in Node Js?Node Js中的事件之间如何等待?
【发布时间】:2019-04-17 17:54:06
【问题描述】:

我尝试使用 NodeJs 在每个事件“更改”之间设置一个时间间隔

我尝试使用setTimeout() 但这不起作用,因为等待时间并同时处理所有文件。

fs.watch('Desktop/folder', function(event, filename){
  if (event == 'Change'){
    // sleep(10);
    console.log('processing...')
    process(filename);
)}})

我做错了什么?

预期结果:

(将 5 个文件放在“桌面/文件夹”中)

> processing...
(wait 10 seconds)
> processing...
(wait 10 seconds)
> processing...
(wait 10 seconds)
> processing...
(wait 10 seconds)
> processing...
(wait 10 seconds)

实际结果:

(将 5 个文件放在“桌面/文件夹”中)

(wait 10 seconds)
> processing...
> processing...
> processing...
> processing...
> processing...

【问题讨论】:

  • “我做错了什么?” 您认为setTimeout 以某种方式阻止了当前的 JavaScript 执行,但事实并非如此。它只是安排一些代码在将来执行,当前执行上下文的剩余语句仍然被评估。如果你想要你描述的行为,你必须建立自己的队列。事件处理程序将项目添加到队列中,并且其他一些函数每 10 秒提取一次。

标签: javascript node.js dom-events


【解决方案1】:

其实你用setTimeout()是正确的。这将在“更改”事件发生后 10 毫秒执行到 process 方法。但是,您可能需要在 setTimeout() 方法中包含 console.log 语句才能看到所需的输出。

fs.watch('Desktop/folder', function(event, filename){
  if (event == 'Change'){
    setTimeout(() => {
        console.log('processing...')
        process(filename);
    }, 10000)
)}})

【讨论】:

  • 间隔究竟是什么?
  • 但是如果我放置 50 个文件,脚本将等待 10 秒并同时处理所有文件。这是我不想要的。
  • 如果您等待 10 毫秒,他们可能会立即处理。如果等待 10000 毫秒,则每次调用 process 函数之间将等待 10 秒。我编辑了上面的代码片段以反映 10000 毫秒的等待时间。
【解决方案2】:

您需要使用setInterval 来处理间隔。你可以阅读更多关于它here

fs.watch('Desktop/folder', function(event, filename){
if (event == 'Change'){
setInterval(() => {
    console.log('processing...')
    process(filename);
}, 10000)
)}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2020-12-21
    • 2015-11-14
    • 2023-04-06
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多