.then(onFulfilled, onRejected)
вторая функция «ловит» ошибку и обрабатывает её, поэтому выполнение не прерывается..catch()
в конце цепочки.// ...
, function(reason) {
console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
return Promise.reject(reason); // передаём пас с ошибкой дальше по цепочке
})
и всё равно добавьте в конце блок .catch()
function test() {
// ...
}
const code = test.toString(); // код функции
// TODO: убрать всё снаружи if { }
code.match(/count/g).length // сколько раз используется
let count
применить defineProperty
, где в своих getter и setter считать обращения. ( 2 * i, 1 + 2 * j )
где i
и j
целые.function isInArea(x, y) {
centerX = 2 * Math.round(x/2);
centerY = 1 + 2 * Math.round((y - 1)/2);
if (! ((x >= centerX) ^ (y >= centerY))) { // НЕ (XOR)
return false; // не та четверть
}
// проверить расстояние
return 1 >= (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY);
}
Object.fromEntries(Object.entries(arr.reduce((acc, c) => (acc[c] = (acc[c] ?? 0) + 1, acc), {})).filter((pair) => pair[1] > 2)
вернёт объект {значение: счётчик}
из элементов, которых «больше 2 шт». Для примера в вопросе вернёт {1: 3}
, т.е. «единиц — было три»reduce()
'ом проходим по массиву, собирая словарь, где ключи – уникальные значения из массива, а значения – счётчики, сколько раз каждое встретилось.[ключ, значение]
; фильтруем, оставляя только те, где значение > 2, и снова собираем в объект.// юзер вводит адрес http://qna.habr.com/
// браузер ресолвит это имя в IP адрес и подключается к нему по порту 80
// браузер шлёт запрос:
GET / HTTP/1.1
Host: qna.habr.com
Accept-Language: ru
// сервер, видя такое дело, соображает, что речь про сайт qna
// и что надо отдать корневую страницу
// отдаёт контент QnA
freelance.habr.com
выглядел бы похоже:// юзер вводит адрес http://freelance.habr.com/
// браузер ресолвит это имя в (тот же) IP адрес и подключается к нему по порту 80
// браузер шлёт запрос:
GET / HTTP/1.1
Host: freelance.habr.com
Accept-Language: ru
// сервер понимает, что речь про сайт freelance
\D
("a2-9f-gg-7232").replace(/\D/g, "")
// "297232"
В браузере — работает.\D
обозначает «всё, кроме цифр»\d
, для сравнения, как раз означает любую цифруg
флаг от слова global, искать не до первого совпадения, а по всей строке.$length = 10;
array_map(fn() => new Apple(), array_fill(0, $length, NULL));
function makeMany(string $className, int $quantity)
{
return array_map(fn() => new $className(), array_fill(0, $quantity, NULL));
}
// использование
makeMany("Apple", 10);
makeMany("Orange", 20);
// или
makeMany(Apple::class, 10);
makeMany(Orange::class, 20);
map()
возвращает новый массив. arr = arr.map( ... )
И почему нельзя использовать {age}
?
map()
заменяет элемент массива на возвращаемое значение. Что вернули, то будет в новом массиве лежать. Взяли объект, вернули только поле возраста, удвоенное. Т.е. получили массив удвоенных возрастов, а имена потерялись. php app.php
и процессы висят, работают. <?php
function run($timerid, $params) {
var_dump($timerid);
var_dump($params);
}
// Каждые 10 секунд выполнять функцию run
Swoole\Timer::tick(10000, "run", ["param1", "param2"]);
// Enable the hook for MySQL: PDO/MySQLi
Co::set(['hook_flags' => SWOOLE_HOOK_TCP]);
// Setup a coroutine context
Co\run(function() {
// Execute a query inside a coroutine
go(function () {
// Already setup the $pdo connection before...
$statement = $pdo->prepare("SELECT * FROM users LIMIT :limit, :offset");
$statement->execute(['limit' => $limit, 'offset' => $offset]);
$data = $statement->fetchAll();
// Process $data result...
});
});