在npm Q循环内部循环

时间:2016-03-25 12:58:02

标签: javascript node.js promise q

我正在实现一个代码来将所有标签保存到db。如果发现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_tags函数中成功保存,我想知道如何解决save_tag函数中的承诺。

我正在使用npm Q库。

2 个答案:

答案 0 :(得分: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 :(得分:-1)

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

我认为它会解决。