forEachObjectInStorage(mPropertyBag, fnPredicate) {
			// getItems() is used in the internal keys of the JsObjectStorage
			var oRealStorage = mPropertyBag.storage.getItems && mPropertyBag.storage.getItems() || mPropertyBag.storage;

			// ensure a Promise
			return Promise.resolve(oRealStorage)
			.then(function(oRealStorage) {
				var aPromises = Object.keys(oRealStorage).map(function(sKey) {
					var bIsFlexObject = sKey.includes(FL_PREFIX);

					if (!bIsFlexObject) {
						return;
					}

					var vStorageEntry = oRealStorage[sKey];
					var oFlexObject = mPropertyBag.storage._itemsStoredAsObjects ? vStorageEntry : JSON.parse(vStorageEntry);
					var bSameReference = true;
					if (mPropertyBag.reference) {
						bSameReference = this.isSameReference(oFlexObject, mPropertyBag.reference);
					}

					var bSameLayer = true;
					if (mPropertyBag.layer) {
						bSameLayer = oFlexObject.layer === mPropertyBag.layer;
					}

					if (!bSameReference || !bSameLayer) {
						return;
					}

					return fnPredicate({
						changeDefinition: oFlexObject,
						key: sKey
					});
				}.bind(this));

				return Promise.all(aPromises);
			}.bind(this));
		}
The iterator for the fl objects in the given Storage. Filters the objects if a reference or layer is passed
@public
@param {object} mPropertyBag object with necessary information
@param {Storage} mPropertyBag.storage browser storage
@param {string} [mPropertyBag.reference] reference of the application
@param {string} [mPropertyBag.layer] current layer
@param {function} fnPredicate The function to apply for each change