我知道debounce的作用。我想在节点中触发它(通过运行带有#!/usr/bin/env node
的脚本),但我遇到了麻烦。
下面的代码:
doThingAfterDelay()
在调用一次之后运行一个简单的函数,而不再被调用100ms。doThingAfterDelay()
doThingAfterDelay()
时间去抖动,然后执行。但它不起作用:
var log = console.log.bind(console),
_ = require('lodash')
var doThingAfterDelay = _.debounce(function(){
return 'foo'
}, 100);
log(doThingAfterDelay());
setTimeout(function(){
log('Sleeping')
}, 15 * 1000)
它返回:
undefined
Sleeping
我期待:
foo
Sleeping
如何让debounced功能运行?
编辑:我可以通过以下方式获得所需的输出:
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()
返回实际值非常重要。
答案 0 :(得分:2)
如果您查看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()