The Ugly.
const a = fn('foo')
.then(r => b(r, 'bar')
.then(/* ... */))
The Bad.
const a = await fn('foo')
const b = await fn(a, 'bar')
The good.
const a = fn('foo')
const b = fn(a, 'bar')
This is just our in-joke in the context of the Java vs JavaScript holywar
yarn add thromise
import { loop } from 'thromise'
const a = v => new Promise(resolve => setTimeout(() => resolve(v), Math.random() * 1000))
const b = v => v
await loop(t => {
const [_a, _b] = t(a, b)
console.log(
'Looks synchronous:',
_a('foo'),
_b('quz'),
_a('bar'),
_a('baz'),
)
return 'result'
})
// or even a bit shorter:
loop((a, b) => {
console.log(
'Looks synchronous:',
a('foo'),
b('quz'),
a('bar'),
a('baz'),
)
}, a, b)
See also synchronized-promise.