Можно и без промисов, на обычных колбеках:
function asyncLoop(fn, i, end) {
if (i < end) fn(i, () => asyncLoop(fn, i + 1, end));
}
function worker(i, next) {
client.hgetall('space' + i, (err, obj) => {
if (err) return; // break
next();
});
}
asyncLoop(worker, 0, 9);
На промисах примерно так:
let p = Promise.resolve();
for (let i = 0; i < 9; i++) {
p = p.then(() => new Promise((resolve, reject) => {
client.hgetall('space' + i, (err, obj) => {
if (err) reject(err); // break
else resolve();
});
}));
}
p.catch(err => console.error(err));