Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да извика функция след завършване на асинхронни функции вътре в цикъла?

Тук използвам обещания на Bluebird. Обърнете внимание как целта на кода е доста ясна и няма вложение.

Първо, нека обещаем повикването hgetall и клиента -

var client = Promise.promisifyAll(client);

Сега, нека напишем кода с обещания, .then вместо обратно извикване на възел и агрегиране с .map . Какво .then do е сигнал, че асинхронната операция е завършена. .map взема масив от неща и ги съпоставя всички с асинхронна операция, точно като вашето обаждане hgetall.

Обърнете внимание как Bluebird добавя (по подразбиране) Async суфикс към обещани методи.

exports.awesomeThings = function(req, res) {
    // make initial request, map the array - each element to a result
    return client.lrangeAsync("awesomeThings", 0, -1).map(function(awesomeThing) {
       return client.hgetallAsync("awesomething:" + awesomeThing);
    }).then(function(things){ // all results ready 
         console.log(things); // log them
         res.send(JSON.stringify(things)); // send them
         return things; // so you can use from outside
    });
};


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Случаи на използване на функциите за оценка и класиране на Redis за комплекти

  2. Има ли MGET аналог за Redis хешове?

  3. Как да изтриете атомарно милиони ключове, съответстващи на модел, използвайки чист Redis?

  4. обработка на промени в пространството на имена по време на десериализация на JSON низ

  5. Python &Redis:Най-добри практики за приложения за мениджър/работник