2016-03-25 22 views
0

すべてのタグをdbに保存するコードを実装しています。私は1つのエラーが捕まえられれば約束を拒否しています。参照のための以下のコード。ループ内のループ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; 
    } 
}; 
私はすべてのタグが save_tag機能に正常に保存されている場合、私は save_tags機能に約束を解決する方法を知っていただきたいと思い

私はnpm Qライブラリを使用しています。

+2

チェックアウト 'Q.all' – Wainage

答えて

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

これまでのように簡単に...ありがとうございました...私の人生は今や平和になるでしょう... – NarayaN

+0

あなたの人生の平和は実現するのがはるかに簡単です。 ;) – Tomalak

+1

ちょっとここに小さなメモを書こうと思っていました。合格または不合格に関係なく各タグを実行する場合は、Q.allの代わりにQ.allSettledを使用します – NarayaN

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

私はそれを解決すると思います。