Number.prototype.ru = function(s){
var w = [ ['год', 'года', 'лет'],['месяц', 'месяца', 'месяцев'],['день', 'дня', 'дней'],['час', 'часа', 'часов'],['минута', 'минуты', 'минут'],['секунда', 'секунды', 'секунд']];
var cc = w.find(i=>new RegExp("^("+i.join('|')+")$","i").test(s.trim()));
if (this == NaN || !cc) return this + " " + s;
if (this != parseInt(this)) return this + " " + cc[1];
var ns = this.toString(),
t = (this > 10 && ns[ns.length-2] === '1') || /[567890]$/.test(ns) ? 2 : (/1$/.test(ns) ? 0 : 1);
return this + " " + cc[t];
}
Date.prototype.left = function(to){
if (Object.prototype.toString.call(to) !== '[object Date]'||this > to || this == 'Invalid Date' || to == 'Invalid Date') return false;
var _d = (to - this) / 86400000, y = parseInt(_d/365), m = parseInt(_d/30.416) - y * 12, t = new Date(this);
t.setFullYear(this.getFullYear() + y); t.setMonth(this.getMonth() + m);
if (t > to) { t.setMonth(t.getMonth()-1); m--; }
var d = (to - t) / 24/60/60000, h = (_d-parseInt(_d)) * 24, mm = (h-parseInt(h)) * 60, s = (mm-parseInt(mm)) * 60;
return { years: y, months: m, _days: parseInt(_d), days: parseInt(d), hours: parseInt(h), minutes: parseInt(mm), seconds: parseInt(s)};
}
var left = new Date().left(new Date(2060,0,0));
console.log(`До конца света по Ньютону осталось ${left.years.ru('sлет')} ${left.months.ru('месяцев')} ${left.days.ru('дней')} ${left.hours.ru('часов')} ${left.minutes.ru('минут')} и ${left.seconds.ru('секунд')}`);
//До конца света по Ньютону осталось 40 лет 9 месяцев 19 дней 5 часов 49 минут и 37 секунд
() => { positionf.bind(img2)() }
function(){ positionf.bind(img2)() }
function(){ positionf.bind(img2).call() }
var img2 = {
id: "2",
left: 500,
top: 600,
position: setInterval(positionf, 200), // в positionf объект this = undefined
talk: talkf // в talkf объект this = undefined
};
Если изменить это на:var img2 = {
id: "2",
left: 500,
top: 600,
position: setInterval(() => { positionf.bind(this)() } , 200), // в positionf объект this = window
talk: talkf.bind(this) // в talkf объект this = window
};
Теперь правильный вариант:var img2 = {
id: "2",
left: 500,
top: 600,
position: setInterval(() => { positionf.bind(img2)() } , 200), // bind`ом устанавливается содержимое this в функциях, т.е. scope - вам нужно изучить этот вопрос
talk: talkf.bind(img2) // в positionf и talkf объект this = объект img2
};
async function foo(){
try{
let sessionsList = await setSessionsList(); //логичнее правда назвать getSessionsList
console.log(sessionsList); // дождется результата и только потом сработает.
} catch(err){
console.error(err);
}
}