Итак, у меня есть некоторый метод генератора, который получает данные, вызывая другой метод, который возвращает разбитые на страницы данные.Этот генератор выполняет итерацию по самому последнему буферу и yield
s для каждого элемента, пока не останется больше извлекаемых данных.
async function* paginated_generator(source, opts = {}) {
buffer = await source(opts)
while (true) {
for (let item of buffer.items) {
yield item
}
if (!buffer.paging.next) {
break
}
buffer = await source({ ...opts, next: buffer.paging.next })
}
}
Метод, который он вызывает в этом случае, выглядит следующим образом и создаетновый Notification
экземпляр для каждой части данных.
async notifications_paginated(opts = {}) {
let Notification = require('./Notification')
let instance = this || opts.instance
let data = await paginated_data(`${instance.api}/news/my`, {
limit: opts.limit || instance.paginated_size,
key: 'news',
prev: opts.prev,
next: opts.next,
headers: instance.headers
})
data.items = data.items.map((item) => new Notification(item))
return data
}
Когда я получаю данные из этого метода напрямую или вставляю что-то вроде console.log(item.some_getter)
в генератор, прежде чем он выдаст, я вижу, чтоОбъект является экземпляром класса Notification
.Но если I await
следующее значение из метода генератора, то данные, которые он выдает, не имеют доступа ни к одному из методов или методов получения, прикрепленных к объекту Notification
.
Что меняется, когда эти данные возвращаются из генератора?