private function saveGarbage(PredisClient $redis, $data) { $deferred = new Deferred(); $tx = $redis->multiExec(); $tx->incr('garbage-counter'); $tx->execute(function ($replies, $redis) use($deferred, $data) { $hashId = 'garbage-' . $replies[0]; $redis->set($hashId, $data, function () use($deferred, $hashId) { $deferred->resolve($hashId); }); }); return $deferred->promise()->then(function ($hashId) use($redis) { $saddDeferred = new Deferred(); $redis->sadd('garbages', $hashId, function () use($hashId, $saddDeferred) { $saddDeferred->resolve($hashId); }); return $saddDeferred->promise(); }); }