Skip to content

Commit e047cf1

Browse files
authored
Merge pull request #5166 from Automattic/2190
fix(model): return saved docs when create() fails
2 parents 930434a + b85897b commit e047cf1

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

lib/model.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1878,6 +1878,7 @@ Model.create = function create(doc, callback) {
18781878
}
18791879

18801880
var toExecute = [];
1881+
var firstError;
18811882
args.forEach(function(doc) {
18821883
toExecute.push(function(callback) {
18831884
var Model = _this.discriminators && doc[discriminatorKey] ?
@@ -1886,9 +1887,12 @@ Model.create = function create(doc, callback) {
18861887
var toSave = doc instanceof Model ? doc : new Model(doc);
18871888
var callbackWrapper = function(error, doc) {
18881889
if (error) {
1889-
return callback(error);
1890+
if (!firstError) {
1891+
firstError = error;
1892+
}
1893+
return callback(null, { error: error });
18901894
}
1891-
callback(null, doc);
1895+
callback(null, { doc: doc });
18921896
};
18931897

18941898
// Hack to avoid getting a promise because of
@@ -1901,12 +1905,20 @@ Model.create = function create(doc, callback) {
19011905
});
19021906
});
19031907

1904-
parallel(toExecute, function(error, savedDocs) {
1905-
if (error) {
1908+
parallel(toExecute, function(error, res) {
1909+
var savedDocs = [];
1910+
var len = res.length;
1911+
for (var i = 0; i < len; ++i) {
1912+
if (res[i].doc) {
1913+
savedDocs.push(res[i].doc);
1914+
}
1915+
}
1916+
1917+
if (firstError) {
19061918
if (cb) {
1907-
cb(error);
1919+
cb(firstError, savedDocs);
19081920
} else {
1909-
reject(error);
1921+
reject(firstError);
19101922
}
19111923
return;
19121924
}
@@ -1917,8 +1929,7 @@ Model.create = function create(doc, callback) {
19171929
} else {
19181930
resolve.apply(promise, savedDocs);
19191931
if (cb) {
1920-
savedDocs.unshift(null);
1921-
cb.apply(_this, savedDocs);
1932+
cb.apply(_this, [null].concat(savedDocs));
19221933
}
19231934
}
19241935
});

0 commit comments

Comments
 (0)