с проблемой понимания коллбеков и промисов.
А именно: я хочу выполнить запрос к монге и достать оттуда ID документа, присвоив это значение в переменную в конструкторе класса для дальнейшего переиспользования, выглядит это примерно так:
class MyBankService {
constructor(token) {
this.bankId = undefined;
this.#getBankId().then(bank => {
this.bankId = bank.id
})
console.log("bank id:", this.bankId)
}
#getBankId() {
return models.Bank.findOne({name: "myBank"})
}
Получается что когда происходит вызов console.log("bank id:", this.bankId), здесь будет undefined т.к это срабатывает раньше чем промис then().
Как это можно решить? Соре если вопрос глупый, но мне пока реально сложно привыкнуть к тому что все построено через промисы и колбеки и как в таком случае прокидывать стейт куда-то выше наружу
А если в then вызвать console.log?
только что попробовал. Да, так сработает, спасибо! Я думал здесь у промисов then вызывать можно лишь 1 раз, а при последующих вызовах ничего уже не произойдет) но в итоге все работает и можно вызывать из разных мест
Да, тут ещё async await можно использовать, тут всё как во фронте, ну а так, рад помочь)
Не пиши асинхронный код в конструкторе. Напиши отдельный публичный асинхронный метод, в котором ты начала вытянешь свой bankId, а потом инициализируешь обьект и вернёшь его
что-то сложно пока понять как это сделать из описания, можно где-то глянуть пример такого подхода?)
Google me help
https://nekobin.com/firelatoxu
Либо так class MyClass { constructor(bankId) { this.bankId = bankId; } static build(token) { const bank = await this.#getBankId(token); return new MyClass(token); } } const myClass = await MyClass.build('some-token') Либо так class MyClass { constructor(token) { return (async () => { const bank = await this.#getBankId(token); this.bankId = bank.id; return this; })() } } const myClass = await new MyClass('some-token')
* не публичный, а статичный
зачем ты делаешь страшно
конкретно?
Обсуждают сегодня