我如何从节点命令行 运行 去抖功能?
How can I run a debounced function from node command line?
我知道 debounce 是做什么的。我想在节点中触发它(通过 运行 使用 #!/usr/bin/env node
编写脚本),但我遇到了麻烦。
下面的代码应该:
- 使
doThingAfterDelay()
成为一个简单的函数,它被调用一次并且在 100 毫秒内没有被再次调用。
- 运行
doThingAfterDelay()
- 休眠(异步)15 秒,给
doThingAfterDelay()
时间去抖并因此执行。
然而它不起作用:
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()
我知道 debounce 是做什么的。我想在节点中触发它(通过 运行 使用 #!/usr/bin/env node
编写脚本),但我遇到了麻烦。
下面的代码应该:
- 使
doThingAfterDelay()
成为一个简单的函数,它被调用一次并且在 100 毫秒内没有被再次调用。 - 运行
doThingAfterDelay()
- 休眠(异步)15 秒,给
doThingAfterDelay()
时间去抖并因此执行。
然而它不起作用:
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()