Если вводить один и тот же пароль несколько раз- хеш всегда будет разныйнет. Вся суть хэш функций, что при всей своей необратимости они всегда выдают детерминированный результат, то есть простым языком на одни и те же входные параметры выдаются одни и те же выходные.
const div = document.body.appendChild(document.createElement('div'));
export function remove() {
document.body.removeChild(div);
}
Даже если мы просто импортируем его, но не вызываем функцию remove, он все равно произведет свой побочный эффект - добавит новый div в body. И это произойдет при первом встретившемся импорте.let rawNews = []; // Массив объектов (Свеженькие новости прямо из БД)
let rawCats = []; // Массив объектов с обработанными новостями
// Промис с массивом результатов
let modifyNews = Promise.all(rawNews.map(async (item, i, arr) => {
item.autor = await getUserByID(item.autor); // Асинхронная функция которая выставляет имя автора вместо id
return item;
}));
// export или module.export =
function formatText(text, formatters) {
return formatters.reduceRight(applyFormatter, text);
}
function applyFormatter(text, formatter) {
const {offset, length, type} = formatter;
const endOffset = offset + length;
const wrapper = getWrapper(type);
return `${text.slice(0, offset)}${wrapper(
text.slice(offset, endOffset),
formatter
)}${text.slice(endOffset)}`;
}
function getWrapper(type) {
switch(type) {
case 'bold':
return boldWrapper;
case 'text_link':
return linkWrapper;
default:
return identityWraper;
}
}
function boldWrapper(text) {
return `<b>${text}</b>`;
}
function linkWrapper(text, {url}) {
return `<a href="${url}">${text}</a>`
}
function identityWraper(text) {
return text;
}
console.log(formatText('qwerty Ссылка', [
{ offset: 0, length: 7, type: 'bold' },
{ offset: 7, length: 6, type: 'text_link', url: 'https://vk.com/' }
])); // <b>qwerty </b><a href="https://vk.com/">Ссылка</a>
function func<T>(...args: any[], cb: (err: any, result: T) => void): any;
// или
function func<T1, T2>(...args: any[], cb: (err: any, res1: T1, res2: T2) => void): any;
наfunction func<T>(...args: any[]): Promise<T>;
// или
function func<T1, T2>(...args: any[]): Promise<{res1: T1; res2: T2}>;
function exec(command: string, options?: ExecOptions, cb: (err: Error, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess;
что приходит к сигнатуре:function exec(command: string, options?: ExecOptions): Promise<{stdout: string | Buffer; stderr: string | Buffer}>;
function spawn(command: string, args: string[], options: SpawnOptions): ChildProcess;
Просто некуда подставить колбэк, который будет отслеживать промис const {promisify} = require('util');
const query = promisify(connection.query.bind(connection));
async function getSomethingFromDB() { // не знаю какое имя у Вас в оригинале
const result = await query(" SELECT * FROM `tb_1` WHERE `id`=? ", [id]);
const array = [];
for (var i in result) {
// ...
const result_2 = await query(" SELECT * FROM `tb_2` WHERE `id`=? ", [id]);
// ...
}
}