HOWPROGRAMMINGWORKS Telegram 1544
⚡️ Новая серия с асинхронной коллекций Collector:

- Теперь поддерживаетя отмена асинхронных операций через AbortController
- Вместо setTimeout теперь AbortSignal.timeout
- И AbortSignal.any для объединения двух сигналов

Основная идея: спрятать сложность асинхронного программирования в абстракцию, имеющую простой контракт, чтобы эта сложность не смешивалась со сложностью прикладного кода.

Можно сравнить код с коллектором и без него:

const dc = collect(['key1', 'key2', 'key3', 'key4'], { timeout: 1000 });
const opt = { signal: dc.signal };

dc.take('key1', fs.readFile, 'README.md', opt);
dc.wait('key2', fs.promises.readFile, 'README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';
dc.wait('key3', (await fetch(url, opt)).json());
setTimeout(() => dc.set('key4', 'value4'), 50);

try {
const result = await dc;
console.log(result);
} catch (err) {
console.log(err);
}


И теперь без него:

const controller = new AbortController();
const opt = { signal: controller.signal };

const timeout = new Promise((resolve, reject) => {
setTimeout(() => {
controller.abort();
reject(new Error('Timed out'));
}, 1000);
});

const promise1 = new Promise((resolve, reject) => {
fs.readFile('README.md', opt, (err, data) => {
if (err) return void reject(err);
resolve(data);
});
});

const promise2 = fs.promises.readFile('README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';

const promise3 = (await fetch(url)).json();

const promise4 = new Promise((resolve) => {
const timer = setTimeout(() => {
resolve('value4');
}, 50);
controller.signal.addEventListener('abort', () => {
clearTimeout(timer);
});
});

const data = Promise.allSettled([promise1, promise2, promise3, promise4]);
try {
const keys = await Promise.race([data, timeout]);
const [key1, key2, key3, key4] = keys.map(({ value }) => value);
const result = { key1, key2, key3, key4 };
console.log(result);
} catch (err) {
console.log(err);
}


Исходники тут: https://github.com/metarhia/metautil



tgoop.com/HowProgrammingWorks/1544
Create:
Last Update:

⚡️ Новая серия с асинхронной коллекций Collector:

- Теперь поддерживаетя отмена асинхронных операций через AbortController
- Вместо setTimeout теперь AbortSignal.timeout
- И AbortSignal.any для объединения двух сигналов

Основная идея: спрятать сложность асинхронного программирования в абстракцию, имеющую простой контракт, чтобы эта сложность не смешивалась со сложностью прикладного кода.

Можно сравнить код с коллектором и без него:

const dc = collect(['key1', 'key2', 'key3', 'key4'], { timeout: 1000 });
const opt = { signal: dc.signal };

dc.take('key1', fs.readFile, 'README.md', opt);
dc.wait('key2', fs.promises.readFile, 'README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';
dc.wait('key3', (await fetch(url, opt)).json());
setTimeout(() => dc.set('key4', 'value4'), 50);

try {
const result = await dc;
console.log(result);
} catch (err) {
console.log(err);
}


И теперь без него:

const controller = new AbortController();
const opt = { signal: controller.signal };

const timeout = new Promise((resolve, reject) => {
setTimeout(() => {
controller.abort();
reject(new Error('Timed out'));
}, 1000);
});

const promise1 = new Promise((resolve, reject) => {
fs.readFile('README.md', opt, (err, data) => {
if (err) return void reject(err);
resolve(data);
});
});

const promise2 = fs.promises.readFile('README.md', opt);
const url = 'http://worldtimeapi.org/api/timezone/Europe';

const promise3 = (await fetch(url)).json();

const promise4 = new Promise((resolve) => {
const timer = setTimeout(() => {
resolve('value4');
}, 50);
controller.signal.addEventListener('abort', () => {
clearTimeout(timer);
});
});

const data = Promise.allSettled([promise1, promise2, promise3, promise4]);
try {
const keys = await Promise.race([data, timeout]);
const [key1, key2, key3, key4] = keys.map(({ value }) => value);
const result = { key1, key2, key3, key4 };
console.log(result);
} catch (err) {
console.log(err);
}


Исходники тут: https://github.com/metarhia/metautil

BY HowProgrammingWorks - JavaScript and Node.js Programming




Share with your friend now:
tgoop.com/HowProgrammingWorks/1544

View MORE
Open in Telegram


Telegram News

Date: |

A few years ago, you had to use a special bot to run a poll on Telegram. Now you can easily do that yourself in two clicks. Hit the Menu icon and select “Create Poll.” Write your question and add up to 10 options. Running polls is a powerful strategy for getting feedback from your audience. If you’re considering the possibility of modifying your channel in any way, be sure to ask your subscribers’ opinions first. Read now Among the requests, the Brazilian electoral Court wanted to know if they could obtain data on the origins of malicious content posted on the platform. According to the TSE, this would enable the authorities to track false content and identify the user responsible for publishing it in the first place. Activate up to 20 bots Telegram Android app: Open the chats list, click the menu icon and select “New Channel.”
from us


Telegram HowProgrammingWorks - JavaScript and Node.js Programming
FROM American