Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@uppy/tus: wait for user promise on beforeRequest #3712

Merged
merged 2 commits into from
May 17, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions packages/@uppy/tus/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,9 @@ module.exports = class Tus extends BasePlugin {
const xhr = req.getUnderlyingObject()
xhr.withCredentials = !!opts.withCredentials

let userProvidedPromise
if (typeof opts.onBeforeRequest === 'function') {
opts.onBeforeRequest(req)
userProvidedPromise = opts.onBeforeRequest(req)
}

if (hasProperty(queuedRequest, 'shouldBeRequeued')) {
Expand All @@ -229,9 +230,17 @@ module.exports = class Tus extends BasePlugin {
done()
return () => {}
})
return p
// If the request has been requeued because it was rate limited by the
// remote server, we want to wait for `RateLimitedQueue` to dispatch
// the re-try request.
// Therefore we create a promise that the queue will resolve when
// enough time has elapsed to expect not to be rate-limited again.
// This means we can hold the Tus retry here with a `Promise.all`,
// together with the returned value of the user provided
// `onBeforeRequest` option callback (in case it returns a promise).
return Promise.all([p, userProvidedPromise])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be nice to add a comment here why we need two promises here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have a suggestion what that comment would look like?

aduh95 marked this conversation as resolved.
Show resolved Hide resolved
}
return undefined
return userProvidedPromise
}

uploadOptions.onError = (err) => {
Expand Down