Технически правильно, но база программирования - вынесение повторяющихся действий в функции, условно как-то так:
function wait(delay) {
let promise;
const fn = function(result) {
return promise || (promise = new Promise(resolve => setTimeout(resolve, delay, result)));
};
fn.then = resolve => fn().then(resolve); // использование функции как thennable
return fn;
}
const req = wait(2000)
.then(() => {
console.log('Подготовка данных...');
const data = {
name: 'Personal computer',
model: 'MSI',
price: 120000,
weightKG: 10,
};
return data;
})
.then(wait(2000))
.then(data => {
console.log('Обработка данных...');
data.status = 'order';
data.discount = '20%';
data.price -= 120000 * parseInt(data.discount, 10) / 100;
return data;
})
.then(wait(2000))
.then(data => {
console.log('Выписка чека...');
data.check = `№${Math.floor(Math.random() * 100000000)}`;
return data;
})
.then(wait(2000))
.then(data => {
console.log(`Данные получены:
1.Наименование: ${data.name}
2.Модель: ${data.model}
3.Цена: ${data.price}
4.Вес: ${data.weightKG}
5.Статус: ${data.status}
6.Скидка: ${data.discount}
7.Чек: ${data.check}`);
})
.then(wait(2000))
.then(() => {
console.log('...:::С новым годом!:::...');
});
Понятно что у вас там не просто setTimeout, ну так и выносить можно что угодно.)