var elements = document.querySelectorAll('.someElement');
var prevElement;
[].forEach.call(elements, function(element) {
element.addEventListener('click', function(e) {
var currentElement = e.сurrentTarget;
if (/* some condition with currentElement and prevElement */) {
// do something
}
prevElement = currentElement;
});
});
const id = arr[0] && arr[0].id;
const first = arr[0] || {}; // const [ first = {} ] = arr;
const { id, name } = first;
const first = arr[0];
if (!first) return null;
const { id, name } = first;
class TestTwo {
constructor() {
this.logThis = logThis;
}
}
this.visibleCities = this.allCities.filter(city => this.defaultCitiesIds.includes(city.id))
.map(city => ({ ...city, check: false }));
this.visibleCities = this.allCities.reduce((result, city) => {
if (this.defaultCitiesIds.includes(city.id)) {
city.check = false;
result.push(city);
}
return result;
}, []);
const b = new B();
b.setX();
b.getX(); // 2
const c = new C();
c.setX();
c.getX(); // 2
class A {
static setX() {
A.prototype.x = 2;
}
}
A.prototype.x = 1;
class B extends A {
getX() {
console.log(this.x);
}
}
class C extends B {
getX() {
console.log(this.x);
}
}
A.setX();
const b = new B();
b.getX(); // 2
const c = new C();
c.getX(); // 2
но у меня такая же обертка создается и работает через call.
f.call('test2', 1, 2);
Подскажите, как правильно искать в данном! случае (именно forEach).
[].forEach.call(document.querySelectorAll('div.foo'), e => {
[].forEach.call(e.querySelectorAll('div.bar'), e => console.log(e));
});
export const withLatest = request => {
let last = 0;
return (...args) =>
new Promise((resolve, reject) => {
const current = ++last;
request(...args)
.then(res => resolve({ isLatest: current === last, res }))
.catch(err => reject({ isLatest: current === last, err }));
});
};
export const withLatest = request => {
let last = 0;
return async (...params) => {
const current = ++last;
try {
const res = await request(...params);
return { isLatest: current === last, res };
} catch (err) {
throw { isLatest: current === last, err };
}
};
};
import Api from '../api';
import { withLatest } from '../utils';
const withLatestFetchData = withLatest(Api.fetchData);
export const fetchData = query => async (dispatch, state) => {
dispatch({ type: "LOADING_DATA" });
try {
const { isLatest, res } = await withLatestFetchData(query);
if (isLatest) {
dispatch({ type: "DATA_SUCCESS", payload: res });
}
} catch ({ isLatest, err }) {
if (isLatest) {
console.log(err);
}
}
};
async function my_function() {
console.log('1');
await new Promise(resolve => {
setTimeout(() => {
console.log('2');
resolve();
}, 1000);
});
console.log('3');
}
function setAsyncTimeout(cb, timeout) {
return new Promise(resolve => {
setTimeout(() => {
cb();
resolve();
}, timeout);
});
}
async function my_function() {
console.log('1');
await setAsyncTimeout(() => { console.log('2'); }, 1000);
console.log('3');
}
export function loginProtect(data) {
return new Promise((resolve, reject) => {
// ищем в базе совпадения по имейлу
UserModel.findOne({ user_email: data.user_email }, function (err, user) {
if (err) return reject(err);
// далее если совпадение нашлось сверяешь хэш пароль с тем что был прислан в функцию
bcrypt.compare(data.user_password, user.user_password, function (err, res) {
if (err) return reject(err);
// res это результат работы, возвращает true или false
return resolve(res);
});
});
});
}
app.post('/api/login', (req, res) => {
const user = {
user_data: req.query
}
// отправляем данные в контроллер
UserController.loginProtect(req.query).then(result => {
// handle success
jwt.sign({ user: user.user_data }, process.env.SECRET_FOR_JWT, (err, token) => {
res.json({
success: true,
token
});
});
}).catch(err => {
// handle error
});
});
немного подумав решил заменить конструкцию
Array(1000)].map(_ => <SomeComponent />);