npm Q 中的循环内承诺

promisses inside loop in npm Q

我正在实现一个代码来将所有标签保存到数据库中。即使发现 1 个错误,我也会拒绝承诺。以下代码供参考。

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 库。

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

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

我认为它会解决。