mirror of
https://github.com/Qortal/Qortal-Hub.git
synced 2025-04-24 11:57:51 +00:00
57 lines
1.1 KiB
TypeScript
57 lines
1.1 KiB
TypeScript
// @ts-nocheck
|
|
|
|
class Semaphore {
|
|
constructor(count) {
|
|
this.count = count
|
|
this.waiting = []
|
|
}
|
|
acquire() {
|
|
return new Promise(resolve => {
|
|
if (this.count > 0) {
|
|
this.count--
|
|
resolve()
|
|
} else {
|
|
this.waiting.push(resolve)
|
|
}
|
|
})
|
|
}
|
|
release() {
|
|
if (this.waiting.length > 0) {
|
|
const resolve = this.waiting.shift()
|
|
resolve()
|
|
} else {
|
|
this.count++
|
|
}
|
|
}
|
|
}
|
|
|
|
let semaphore = new Semaphore(1)
|
|
let reader = new FileReader()
|
|
|
|
export const fileToBase64 = (file) => new Promise(async (resolve, reject) => {
|
|
if (!reader) {
|
|
reader = new FileReader()
|
|
}
|
|
await semaphore.acquire()
|
|
reader.readAsDataURL(file)
|
|
reader.onload = () => {
|
|
const dataUrl = reader.result
|
|
if (typeof dataUrl === "string") {
|
|
const base64String = dataUrl.split(',')[1]
|
|
reader.onload = null
|
|
reader.onerror = null
|
|
resolve(base64String)
|
|
} else {
|
|
reader.onload = null
|
|
reader.onerror = null
|
|
reject(new Error('Invalid data URL'))
|
|
}
|
|
semaphore.release()
|
|
}
|
|
reader.onerror = (error) => {
|
|
reader.onload = null
|
|
reader.onerror = null
|
|
reject(error)
|
|
semaphore.release()
|
|
}
|
|
}) |