Nodejs выполняет команды redis с задержкой

K.Thanvi спросил: 07 октября 2018 в 11:22 в: node.js

Я хочу выполнить несколько операций redis из приложения nodejs с некоторой заданной задержкой между каждым выполнением.

Я использую клиент node_redis. Версия узла v8.10.0

Я думал о ее реализации, как показано ниже:

function func(id1, max){
    for(i=0; i < max; i++){       
        client.incr(id1, (error, value) => {
            if(error){
                console.log("redis incr failed : " + error);
                return error;
            }
            console.log("updated value : " + value);
        });
        sleep.sleep(1);
    }
    client.quit();
return("incr value ended for : " + id);    
}func(id1, max);

Но тогда в этом случае полный redis incr происходит с перерывом, и обратный вызов (console.log("updated value : " + value")) происходит с задержкой. Примечание: для sleep в приведенном выше коде я использую спящий пакет. Я также пробовал следующее решение (найдено после поиска в Google) ):

var delay = 1000; //1 secondfor (var i = 0; i < max; i++) {
    setTimeout(() => {
        client.incr(id, (error, value) => {
            if(error){
                console.log("redis incr failed : " + error);
                return error;
            }
            console.log("updated value : " + value);
        });
    }, delay);
}

Но он также ведет себя так же, как и выше.

Afaik, это вызвано тем, что nodejs является synchronous и (я думаю) node_redis клиент является async.

TL; DR я хочу увеличить ключ каждые n секунд в redis с использованием nodejs.

Заранее спасибо! PS: я новичок в nodejs.


0 ответов