@@ -16,6 +16,16 @@ const checkReservedKey = key => {
1616 }
1717} ;
1818
19+ const handleBatchResults = ( results ) => {
20+ const firstError = _ . find ( results , result => result instanceof Error ) ;
21+ if ( ! firstError ) {
22+ return results ;
23+ }
24+ const error = new AVError ( firstError . code , firstError . message ) ;
25+ error . results = results ;
26+ throw error ;
27+ } ;
28+
1929// Helper function to get a value from a Backbone object as a property
2030// or as a function.
2131function getValue ( object , prop ) {
@@ -139,17 +149,17 @@ module.exports = function(AV) {
139149 } ) ,
140150 } , options )
141151 ) . then ( function ( response ) {
142- _ . forEach ( objects , function ( object , i ) {
152+ const results = _ . map ( objects , function ( object , i ) {
143153 if ( response [ i ] . success ) {
144- object . _finishFetch (
145- object . parse ( response [ i ] . success ) ) ;
146- } else {
147- const error = new Error ( response [ i ] . error . error ) ;
148- error . code = response [ i ] . error . code ;
149- throw error ;
154+ object . _finishFetch ( object . parse ( response [ i ] . success ) ) ;
155+ return object ;
156+ }
157+ if ( response [ i ] . success === null ) {
158+ return new AVError ( AVError . OBJECT_NOT_FOUND , 'Object not found.' ) ;
150159 }
160+ return new AVError ( response [ i ] . error . code , response [ i ] . error . error ) ;
151161 } ) ;
152- return objects ;
162+ return handleBatchResults ( results ) ;
153163 } ) ;
154164
155165 // Attach all inheritable methods to the AV.Object prototype.
@@ -1309,21 +1319,26 @@ module.exports = function(AV) {
13091319 if ( ! objects || objects . length === 0 ) {
13101320 return AV . Promise . resolve ( ) ;
13111321 }
1312- const objectsByClassNameAndFlags = _ . groupBy ( objects , object => JSON . stringify ( {
1313- className : object . className ,
1314- flags : object . _flags
1315- } ) ) ;
13161322 const body = {
1317- requests : _ . map ( objectsByClassNameAndFlags , objects => {
1318- const ids = _ . map ( objects , 'id' ) . join ( ',' ) ;
1323+ requests : _ . map ( objects , object => {
1324+ if ( ! object . className ) throw new Error ( 'object must have className to destroy' ) ;
1325+ if ( ! object . id ) throw new Error ( 'object must have id to destroy' ) ;
13191326 return {
13201327 method : 'DELETE' ,
1321- path : `/1.1/classes/${ objects [ 0 ] . className } /${ ids } ` ,
1322- body : objects [ 0 ] . _flags
1323- }
1324- } )
1328+ path : `/1.1/classes/${ object . className } /${ object . id } ` ,
1329+ body : object . _flags
1330+ } ;
1331+ } ) ,
13251332 } ;
1326- return _request ( 'batch' , null , null , 'POST' , body , options ) ;
1333+ return _request ( 'batch' , null , null , 'POST' , body , options ) . then ( function ( response ) {
1334+ const results = _ . map ( objects , function ( object , i ) {
1335+ if ( response [ i ] . success ) {
1336+ return null ;
1337+ }
1338+ return new AVError ( response [ i ] . error . code , response [ i ] . error . error ) ;
1339+ } ) ;
1340+ return handleBatchResults ( results ) ;
1341+ } ) ;
13271342 } ;
13281343
13291344 /**
@@ -1627,21 +1642,15 @@ module.exports = function(AV) {
16271642 } )
16281643
16291644 } , options ) . then ( function ( response ) {
1630- var error ;
1631- AV . _arrayEach ( batch , function ( object , i ) {
1645+ const results = _ . map ( batch , function ( object , i ) {
16321646 if ( response [ i ] . success ) {
1633- object . _finishSave (
1634- object . parse ( response [ i ] . success ) ) ;
1635- } else {
1636- error = error || response [ i ] . error ;
1637- object . _cancelSave ( ) ;
1647+ object . _finishSave ( object . parse ( response [ i ] . success ) ) ;
1648+ return object ;
16381649 }
1650+ object . _cancelSave ( ) ;
1651+ return new AVError ( response [ i ] . error . code , response [ i ] . error . error ) ;
16391652 } ) ;
1640- if ( error ) {
1641- return AV . Promise . reject (
1642- new AVError ( error . code , error . error ) ) ;
1643- }
1644-
1653+ return handleBatchResults ( results ) ;
16451654 } )
16461655 ) ;
16471656 AV . _arrayEach ( batch , function ( object ) {
0 commit comments