Promise.all(
URL.map(
(url) => fetch(url)
.then((response) => `${url} : ${response.status} ${response.statusText}`)
.catch((e) => `${url} : ${e.message}`),
),
)
.then(
(results) =>
alert(results.join("\n")),
);
var unresolved = URL.length;
var results = [];
for (i = 0; i < URL.length; i += 1) {
(function(i) {
var request = new XMLHttpRequest();
request.open("GET", URL[i]);
request.onreadystatechange = function (event) {
console.log(request);
if (request.readyState === 4) {
if (request.status === 200) {
results[i] = URL[i] + ' РАБОТАЕТ';
} else {
results[i] = URL[i] + ' НЕ РАБОТАЕТ';
}
unresolved -= 1;
console.log(unresolved);
if (unresolved === 0) {
alert(results.join("\n"));
}
}
}
request.send();
})(i);
}
Promise.resolve(value)
- это статический метод, возвращающий промис в состоянии fulfilled с указанным значением.new Promise((resolve) => resolve(value))
И можно как-то выполнить промис без аргументов?Что значит "выполнить"? Создать можно, сменить статус с pending на fulfilled нельзя, на rejected можно по исключению.
new Promise((แก้ไข) => แก้ไข('Решено'));
//Promise { <state>: "fulfilled", <value>: "Решено" }
const text = 'Текст для сохранения';
const blob = new Blob([text], { type: 'text/plain' });
const content = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = content;
link.download = 'test.txt';
document.body.appendChild(link);
const click = new Event('click');
link.dispatchEvent(click);
link.remove();
const str = "{'id':'147','name':'example's name1','address':'sample street 1'}";
const [_, id, name, address] = str.match(/{'id':'(.*?)','name':'(.*?)','address':'(.*?)'}/);
console.log(id); // 147
console.log(name); // example's name1
console.log(address); // sample street 1
const re = /{'id':'(?<id>.*?)','name':'(?<name>.*?)','address':'(?<address>.*?)'}/;
const result = re.exec("{'id':'147','name':'example's name1','address':'sample street 1'}");
console.log(result.groups);
// Object { id: "147", name: "example's name1", address: "sample street 1" }
const increaseSalary = async () => {
try {
const employees = await api.getEmployees();
const employee = employees.reduce(
(acc, cur) => (acc.salary > cur.salary ? cur : acc),
{ salary: Infinity },
);
const newSalary = (employee.salary * 1.2) | 0;
const result = await api.setEmployeeSalary(employee.id, newSalary);
if (result.salary !== newSalary) {
throw 'API Error, salary has not increased';
}
await api.notifyEmployee(
employee.id,
`Hello, ${employee.name}! Congratulations, your new salary is ${newSalary}!`,
);
return true;
} catch (e) {
api.notifyAdmin(e.message);
return false;
}
});
const temp = data.reduce(
(acc, cur) => {
acc.bank_props[cur.bank_props.id] = cur.bank_props;
acc.settlements[cur.bank_props.id] = cur.settlements;
return acc;
},
{ bank_props: {}, settlements: {} }
);
const result = {
bank_props: Object.values(temp.bank_props),
settlements: Object.values(temp.settlements),
};
WebAPI браузера поедоставляет вещи типа setTimeout, или async await, коллбек-функции которые закидываются в очередь, а оттуда в порядке своей приоритетности попадают в стек по очереди. Промисы обрабатываются в приоритетном порядке.Обычные callback-функции не попадают в очередь, они вызываются в общем стеке. Кроме промисов в приоритетную очередь микрозадач функция может быть добавлена через queueMicrotask(function).
А что если "асинхронные" операции занимают много памяти и выполняются долго. Если они выполняются в том же стеке, то они также перекроют доступ ко всем остальным операциям?Асинхронные операции выполняются отдельными служебными потоками параллельно с основным стеком. Поэтому сами они не могут заблокировать основной стек. По завершению/таймеру асинхронная операция кладёт функцию в очередь микро- или макрозадач.