我如何从节点命令行 运行 去抖功能?

How can I run a debounced function from node command line?

我知道 debounce 是做什么的。我想在节点中触发它(通过 运行 使用 #!/usr/bin/env node 编写脚本),但我遇到了麻烦。

下面的代码应该:

然而它不起作用:

var log = console.log.bind(console),
  _ = require('lodash')


var doThingAfterDelay = _.debounce(function(){ 
  return 'foo'
}, 100);


log(doThingAfterDelay());

setTimeout(function(){
  log('Sleeping')
}, 15 * 1000)

它returns:

undefined
Sleeping

我预计:

foo
Sleeping

如何制作去抖功能运行?

编辑: 我可以通过以下方式获得所需的输出:

var log = console.log.bind(console),
    _ = require('lodash')


var doThingAfterDelay= _.debounce(function(){
    log('foo')
}, 100);


doThingAfterDelay('one', 'two');

setTimeout(function(){
    log('Sleeping')
}, 15 * 1000)

但我不明白为什么 - doThingAfterDelay() returns 一个真正的价值很重要。

如果您查看 debounce function 的源代码,您会发现它在底层使用了 setTimeout,因此具有相同的机制。您可以在执行去抖功能后使用回调或 Promise 传递值(如果您使用 Promise,您可以使您的代码看起来与 async/await 更加同步)。

var log = console.log.bind(console),
    _ = require('lodash')

var delayedResults = new Promise(function(resolve) {
    _.debounce(function(){
        resolve('foo');
    }, 100)();
});

var start = async function(){
    log(await delayedResults )
}

start()