7 while (this.done !== null)
8 await this.done.promise
10 done.promise = new Promise(
11 (resolve, reject) => {done.resolve = resolve}
24 BinarySemaphore = class {
30 done.promise = new Promise(
31 (resolve, reject) => {done.resolve = resolve}
38 while (this.done !== null)
39 await this.done.promise
41 done.promise = new Promise(
42 (resolve, reject) => {done.resolve = resolve}
48 if (this.done !== null)
51 done.promise = new Promise(
52 (resolve, reject) => {done.resolve = resolve}
69 constructor(title, detail, status) {
75 // note: Javascript errors return status 400 (Bad request) in the client
76 // version of Problem, 500 (Internal server error) in the server version
79 error instanceof Problem ?
83 (error.stack || error.message),
90 api_call = async (endpoint, ...args) => {
91 let response = await fetch(
93 {method: 'POST', body: JSON.stringify(args)}
95 let result = await response.json()
97 throw new Problem(result.title, result.detail, result.status)