@@ -150,7 +150,7 @@ function queueSync(bidderCodes, gdprConsent) {
150
150
( response ) => {
151
151
try {
152
152
response = JSON . parse ( response ) ;
153
- response . bidder_status . forEach ( bidder => doBidderSync ( bidder . usersync . type , bidder . usersync . url , bidder . bidder ) ) ;
153
+ doAllSyncs ( response . bidder_status ) ;
154
154
} catch ( e ) {
155
155
utils . logError ( e ) ;
156
156
}
@@ -162,24 +162,40 @@ function queueSync(bidderCodes, gdprConsent) {
162
162
} ) ;
163
163
}
164
164
165
+ function doAllSyncs ( bidders ) {
166
+ if ( bidders . length === 0 ) {
167
+ return ;
168
+ }
169
+
170
+ const thisSync = bidders . pop ( ) ;
171
+ if ( thisSync . no_cookie ) {
172
+ doBidderSync ( thisSync . usersync . type , thisSync . usersync . url , thisSync . bidder , doAllSyncs . bind ( null , bidders ) ) ;
173
+ } else {
174
+ doAllSyncs ( bidders ) ;
175
+ }
176
+ }
177
+
165
178
/**
166
179
* Run a cookie sync for the given type, url, and bidder
167
180
*
168
181
* @param {string } type the type of sync, "image", "redirect", "iframe"
169
182
* @param {string } url the url to sync
170
183
* @param {string } bidder name of bidder doing sync for
184
+ * @param {function } done an exit callback; to signify this pixel has either: finished rendering or something went wrong
171
185
*/
172
- function doBidderSync ( type , url , bidder ) {
186
+ function doBidderSync ( type , url , bidder , done ) {
173
187
if ( ! url ) {
174
188
utils . logError ( `No sync url for bidder "${ bidder } ": ${ url } ` ) ;
189
+ done ( ) ;
175
190
} else if ( type === 'image' || type === 'redirect' ) {
176
191
utils . logMessage ( `Invoking image pixel user sync for bidder: "${ bidder } "` ) ;
177
- utils . triggerPixel ( url ) ;
192
+ utils . triggerPixel ( url , done ) ;
178
193
} else if ( type == 'iframe' ) {
179
194
utils . logMessage ( `Invoking iframe user sync for bidder: "${ bidder } "` ) ;
180
- utils . insertUserSyncIframe ( url ) ;
195
+ utils . insertUserSyncIframe ( url , done ) ;
181
196
} else {
182
197
utils . logError ( `User sync type "${ type } " not supported for bidder: "${ bidder } "` ) ;
198
+ done ( ) ;
183
199
}
184
200
}
185
201
0 commit comments