2016-03-25 11 views
0

Ich implementiere einen Code, um alle Tags in db zu speichern. Ich lehne das Versprechen ab, wenn sogar 1 Fehler gefangen wird. Unterhalb des Codes als Referenz.Versprechungen innerhalb der Schleife in npm Q

module.exports = { 

    save_tag: function(tag, id) { 

     //Some logic to validate a tag goes here 

     return db.save(tag,id); //db.save is a promise; 
    }, 
    save_tags: function(tags, post_id) { 

     var def = Q.defer(); 

     _.forEach(tags, function(tag, key) { 
      self.save_tag(tag, post_id).then(null, def.reject); 
     }); 
     return def.promise; 
    } 
}; 

Ich mag würde wissen, wie kann ich das Versprechen in save_tags Funktion beheben, wenn alle Tags erfolgreich in save_tag Funktion gespeichert werden.

Ich verwende npm Q-Bibliothek.

+2

checkout 'Q.all' – Wainage

Antwort

1
module.exports = { 
    save_tag: function(tag, id) { 
     return db.save(tag,id); // db.save is a promise; 
    }, 
    save_tags: function(tags, post_id) { 
     var savedTags = _.map(tags, function(tag) { 
      return self.save_tag(tag, post_id); 
     }); 
     return Q.all(savedTags); 
    } 
}; 

https://github.com/kriskowal/q/wiki/API-Reference#promiseall

+1

So einfach wie es hätte sein können ... Vielen Dank ... Mein Leben wäre jetzt in Frieden ... – NarayaN

+0

Ihr Leben ist einfach zu erreichen. ;) – Tomalak

+1

Ich wollte hier nur eine kleine Notiz machen. Wenn Sie jedes Tag unabhängig von bestanden oder nicht bestanden ausführen möchten, verwenden Sie Q.allSettled anstelle von Q.all – NarayaN

-1
self.save_tag(tag, post_id).then(function _returnOK(){ 
    //def.resolve(); 
}).fail(function _returnFail(){ 
    //def.reject(); 
}); 

Ich denke, es lösen wird.

Verwandte Themen