'use strict'; const fs = require('node:fs'); class Thenable { next = null; then(fn) { this.fn = fn; this.next = new Thenable(); return this.next; } resolve(value) { if (!this.fn) return; const next = this.fn(value); if (!next) return; next.then((value) => { this.next.resolve(value); }); } } // Usage const readFile = (filename) => { const thenable = new Thenable(); fs.readFile(filename, 'utf8', (err, data) => { if (err) throw err; thenable.resolve(data); }); return thenable; }; readFile('file1.txt') .then((data) => { console.dir({ file1: data }); return readFile('file2.txt'); }) .then((data) => { console.dir({ file2: data }); return readFile('file3.txt'); }) .then((data) => { console.dir({ file3: data }); });