(async () => {
async function fetchData1(url) {
try {
let response = await fetch(url); // promise
return await response.json(); // promise
} catch(e) {
return null;
}
}
// на промисах это выглядело бы так, вам все равно нужно вернуть обьект промиса, если вам важно вернуть результат.
function fetchData2(url) {
return new Promise((resolve,reject) => {
fetch(url).then(res => res).then (res => res.json()).then((result) => {
resolve(result); // говорим что наш промис достиг успеха,
}).carch(e => {
resolve(null); // так как мы повторяем логику try catch мы используем пустой ответ. вместо reject(e);
})
})
}
const promises = [
fetchData1('/last-news'),
fetchData2('/last-comments'),
fetchData2('/popular-news'),
];
// (после объявления массива методы уже будут выполнятся, лучше делать через promises.push(...) )
// .. куча логики
// приказываем ожидать если не все выполнялось.
const result = await Promise.all(promises);
console.log({result});
// или так
Promise.all(promises).then( results => {
console.log({result});
})
// a так если мы хотим последовательно и лапшой promise hell
fetchData1('/last-news').then(resultNetws => {
fetchData2('/last-comments').then(lastComments => {
fetchData2('/popular-news'').then(popularNews => {
})
})
});
// рекомендую прочитать про статичные методы у обьекта Promise.all итд.
})());
let el = document.getElementById('my_slect');
el.addEventListener('change', function(e){
let value = e.target.value;
if(value === 'option value'){
location.href = ''; // ссылка для редеректа
}
})
<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
p {
text-align: center;
font-size: 60px;
margin-top: 0px;
}
</style>
</head>
<body>
<p id="demo"></p>
<script>
function countDown(elm, duration, fn){
// Set the date we're counting down to
var countDownDate = new Date().getTime() + (1000 * duration);
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Output the result in an element with id="demo"
elm.innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s ";
// If the count down is over, write some text
if (distance < 0) {
clearInterval(x);
fn();
elm.innerHTML = "EXPIRED";
}
}, 1000);
}
countDown(document.getElementById('demo'), 5, function(){
alert('EXPIRED');
})
</script>
</body>
</html>
$_SESSSION['checkNowSms'] = time() + 120;
$checkNowSms = $_SESSION['checkNowSms'] ?? 0;
$distance = $checkNowSms - time();
if($distance <= 0) {
// показывам форму для ввода номера
} else {
// показывам форму для ввода смс кода.
}
it('test safe code', function (done) {
(async () =>{
let url = 'http://localhost:'+serverPort+'/test-js';
await Page.navigate({ url: url, referrer: 'http://test-site.ru' });
Page.loadEventFired(async() => {
let scriptJS = `document.querySelectorAll('script').length`;
let result = await Runtime.evaluate({
expression: scriptJS
});
try {
expect(result.result.value).to.equal(1, "is insert script count 2?");
} catch(e){
return done(e);
}
return done();
});
})();
});
// результат в виде массива
function findItemsByUserName($objects, username){
let items = [];
for(let key in $objects){
if ($objects[key].name === username) {
items.push(Object.assign({},$objects[key]));
}
}
return items;
}
// результат в виде объектов
function findItemsByUserName($objects, username){
let items = {};
for(let key in $objects){
if ($objects[key].name === username) {
items[key] = Object.assign({},$objects[key]);
}
}
return items;
}
const
finalhandler = require('finalhandler'), // пакет нужно будет поставить через npm
http = require('http'),
officegen = require('officegen'); // пакет нужно будет поставить через npm
Router = require('router'), // пакет нужно будет поставить через npm
// создаем сервер и биндим роутеры на все ответы
server = http.createServer(function onRequest(req, res) {
router(req, res, finalhandler(req, res));
});
// внутри метода пишем свой код с этой либы, я особо не вникал взял пример из документации
router.get('/generate-pptx', function(request,response) {
response.writeHead ( 200, {
"Content-Type": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
'Content-disposition': 'attachment; filename=surprise.pptx'
});
var pptx = officegen ( 'pptx' );
pptx.on ( 'finalize', function ( written ) {
// ...
});
pptx.on ( 'error', function ( err ) {
// ...
});
// ... (fill pptx with data)
pptx.generate ( response );
});
// слушаем запросы на 3000 порту
server.listen({port: 3000});
let direction = 'from';
let url = strtr('url.com/api/{direction}/rest', {
'{direction}' => direction
});
console.log('test url replace placeholder',url);