簡體   English   中英

如何從節點命令行運行去抖動功能?

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

我知道去抖的作用。 我想在節點中觸發它(通過使用#!/usr/bin/env node運行腳本),但是遇到了麻煩。

以下代碼

  • 使doThingAfterDelay()在被調用一次並且在100ms內不再被調用之后運行一個簡單的函數。
  • 運行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)

它返回:

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()返回真實值很重要。

如果您查看去抖動功能的源代碼,您會發現它在后台使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM