в констукторе класса можно сделать запрос в другое место?
Собственно для этого я и создвал метод create, чтобы в нем получить некоторые данные, затем уже манипулировать готовым блоком с полученным цветом и заданным руками типом.
Поскольку из конструктора нельзя вернуть промис (или можно?), пришлось добавить метод create.
мб можно даже просто обновлять color вызывая create при каждом интервале, хотя наверно лучше создавать новый объект
async function getRandomColorName() {
const response = await fetch('http://www.colr.org/json/color/random').then(r => r.json());
return response.colors[0].tags[0].name;
}
async function send(data) {
const response = await fetch('https://reqres.in/api/users', {
method: 'post',
mode: 'cors',
body: JSON.stringify(data),
})
.then(r => r.json())
.catch(console.log);
console.log( 'Data sent successfully, response: ', response );
}
function initSending(data, Construct) {
setInterval(async () => {
send({ type: 'brick', color: await getRandomColorName() });
}, 10000);
}
initSending();
class Block {
constructor(data) {
if (!data.type) {
throw new Error('No type passed!');
}
this.color = data.color || '';
this.type = data.type;
}
prepareForSending() {
this.color = this.color.toUpperCase();
return this;
}
}
async function getRandomColorName() {
const response = await fetch('http://www.colr.org/json/color/random').then(r => r.json());
return response.colors[0].tags[0].name;
}
async function send(data) {
const response = await fetch('https://reqres.in/api/users', {
method: 'post',
mode: 'cors',
body: JSON.stringify(data),
})
.then(r => r.json())
.catch(console.log);
console.log( 'Data sent successfully, response: ', response );
}
function initSending(data, Construct) {
setInterval(async () => {
const block = new Block({ type: 'brick', color: await getRandomColorName() });
send(block.prepareForSending());
}, 10000);
}
initSending();
"12"
и "34"
, то получится строка "1234"
. А если попытаться сложить числа 12 и 34, то получится число 46 Спасибо за развернутые вопросы. Как раз не мог понять в чем мои косяки.
Постараюсь ответить как я рассуждал при написании.
1. Обратил внимание что функция асинхронная и создание блока заимает время.
2. Действительно, не зачем, переписал код. (Хотел иметь возможность получить последний созданный блок)
3. Действительно, не зачем, переписал код с использованием this. (Когда писал думал что нужен экземпляр для использования методов, затупил)
4. тоже что и в 3.
5. Он писался в свойство, последнего созданного блока, по сути тоже не зачем, переписал.
class Block {
constructor(data) {
if (!data.type) {
throw new Error('No type passed in Block constructor!');
}
this.color = data.color || '';
this.type = data.type;
}
prepareForSending() {
this.color = this.color.toUpperCase();
return this;
};
}
function send(data) {
fetch('http://test.com', {
method: 'POST',
body: JSON.stringify(data),
})
.catch(console.log)
}
function initSending(data) {
setInterval(() => {
send( data );
}, 10000);
}
const block = new Block({ type: 'brick', color: 'red' });
initSending( block.prepareForSending() );