JSFiddle - React, Tailwind, and code Playground
by Alexander Novikov
JavaScript 1.7
class Atol
{
constructor(isEanbled) {
this.isEanbled = isEanbled;
}
create(options, resolve, reject) {
alert("Creating Atol");
setTimeout(() => {
this.isEanbled
? resolve({ name: "Atol Device" })
: reject();
}, 2000);
}
}
class ShtrihM
{
constructor(isEanbled) {
this.isEanbled = isEanbled;
}
create(options, resolve, reject) {
alert("Creating Shtrih-M");
setTimeout(() => {
this.isEanbled
? resolve({ name: "Shtrih-M Device" })
: reject();
}, 2000);
}
}
class Computer
{
constructor(vendors) {
this.vendors = vendors;
}
create(options) {
this.vendors.reduce(
(promise, vendor) => {
return promise.then(
(device) => { // stop and pass created device
return Promise.resolve(device);
},
() => { // try to create with the next vendor
return new Promise((resolve, reject) => {
vendor.create(options, resolve, reject);
});
}
);
},
Promise.reject() // we try next vendor after reject
).then(options.onDetected, options.onNotDetected);
}
}
var computer = new Computer([
new Atol(false),
new ShtrihM(true)
]);
computer.create({
onDetected: (device) => {
alert("Fiscal register has been detected: " + device.name);
},
onNotDetected: () => {
alert("Failed detecting fiscal register!");
}
});