async function saveSequenceOfDirtyChanges(aDirtyChanges, bSkipUpdateCache, sParentVersion, sReference) {
		var oFirstNewChange;
		if (sParentVersion) {
			// in case of changes saved for a draft only the first writing operation must have the parentVersion targeting the basis
			// followup changes must point the existing draft created with the first request
			var aNewChanges = aDirtyChanges.filter(function(oChange) {
				return oChange.getState() === States.LifecycleState.NEW;
			});
			oFirstNewChange = [].concat(aNewChanges).shift();
		}

		// A successful save operation returns the flexObject in the response
		// The flexObjects are returned to the calling function where they will be set to persisted
		const oCollectedResponse = {
			response: []
		};

		for (const oDirtyChange of aDirtyChanges) {
			const oResponse = await performSingleSaveAction(oDirtyChange, oFirstNewChange, sParentVersion);
			updateCacheAndDirtyState(oDirtyChange, bSkipUpdateCache, sReference);
			if (oResponse?.response) {
				oCollectedResponse.response.push(...oResponse.response);
			}
		}
		FlexState.getFlexObjectsDataSelector().checkUpdate({reference: sReference});
		return oCollectedResponse;
	}
Saves a sequence of dirty changes by calling the appropriate back-end method
(create for new changes, deleteChange for deleted changes);
to ensure the correct order, the methods are called sequentially;
after a change was saved successfully, it is removed from the dirty changes and the cache is updated.

@param {sap.ui.fl.apply._internal.flexObjects.FlexObject[]} aDirtyChanges - Array of dirty changes to be saved
@param {boolean} [bSkipUpdateCache] If true, then the dirty change shall be saved for the new created app variant, but not for the current app;
therefore, the cache update of the current app is skipped because the dirty change is not saved for the running app.
@param {string} [sParentVersion] - Indicates if changes should be written as a draft and on which version the changes should be based on
@returns {Promise<object>} resolving with the collected storage response after all changes have been saved