Rückruf Ich versuche, meine var todos
mit zu füllen, was ich in meinem Redis-Server habe, bekomme ich, dass ich Versprechen verwenden müssen, aber ich bin wahrscheinlich an der richtigen Stelle nicht.Mit Versprechen mit redis
Zuerst bekomme ich alle IDs mit .smembers()
Funktion und für jede der ID bekomme ich das Objekt mit der richtigen ID und Parsing es in todos
.
var todos=[];
res.locals.redis.smembers("todo:20", function(err, reply){ // i.e. SMEMBERS todo:20 returns 0 and 1
var promises=reply.map(function(elem){
res.locals.redis.get("todo:20:"+elem, function(err, reply1){ // i.e. GET todo:20:0
return new Promise(function(resolve, reject){
todos.push(JSON.parse(reply1));
resolve();
});
});
});
Promise.all(promises)
.then(function(){
res.locals.redis.quit();
res.render('todolist.ejs', {todo: todos});
})
.catch(function(reason){
console.log(reason);
});
});
Verändert diese Promisify-Funktion die Ladegeschwindigkeit? Ich bekomme, dass es besser aussieht, aber ich bin immer noch verwirrt, warum ich besser wäre als die vorherige Antwort –
Die Antwort ist ** nein **, _promisify_ Funktion hat keinen Einfluss auf die Leistung. Wie Sie im Beispiel sehen, gibt es ein Objekt mit einfacher Logik zurück: 'reject'-Versprechung, wenn ein Fehler vorliegt, oder' resolve' mit einem asynchronen Aufruf, andernfalls. – alexmac