* Any warnings returned by the API, including warnings about invalid option names or values,
* are ignored. However, do not rely on this behavior.
*
- * If necessary, the options will be saved using several parallel API requests. Only one promise
+ * If necessary, the options will be saved using several sequential API requests. Only one promise
* is always returned that will be resolved when all requests complete.
*
* @param {Object} options Options as a `{ name: value, … }` object
saveOptions: function ( options ) {
var name, value, bundleable,
grouped = [],
- deferreds = [];
+ promise = $.Deferred().resolve();
for ( name in options ) {
value = options[ name ] === null ? null : String( options[ name ] );
}
} else {
if ( value !== null ) {
- deferreds.push( this.postWithToken( 'csrf', {
- formatversion: 2,
- action: 'options',
- optionname: name,
- optionvalue: value
- } ) );
+ promise = promise.then( function ( name, value ) {
+ return this.postWithToken( 'csrf', {
+ formatversion: 2,
+ action: 'options',
+ optionname: name,
+ optionvalue: value
+ } );
+ }.bind( this, name, value ) );
} else {
// Omitting value resets the option
- deferreds.push( this.postWithToken( 'csrf', {
- formatversion: 2,
- action: 'options',
- optionname: name
- } ) );
+ promise = promise.then( function ( name ) {
+ return this.postWithToken( 'csrf', {
+ formatversion: 2,
+ action: 'options',
+ optionname: name
+ } );
+ }.bind( this, name ) );
}
}
}
if ( grouped.length ) {
- deferreds.push( this.postWithToken( 'csrf', {
- formatversion: 2,
- action: 'options',
- change: grouped
- } ) );
+ promise = promise.then( function () {
+ return this.postWithToken( 'csrf', {
+ formatversion: 2,
+ action: 'options',
+ change: grouped
+ } );
+ }.bind( this ) );
}
- return $.when.apply( $, deferreds );
+ return promise;
}
} );