como posso mapear / filtrar assincronamente um iterável assíncrono?

Digamos que eu tenha um iterável assíncrono que eu possa deixar passar usandoasync for, como posso mapear e filtrar para um novo iterador assíncrono? O código a seguir, que é uma adaptação de como eu faria a mesma coisa com um iterável síncrono, não funciona, poisyield não é permitido dentroasync defs.

async def mapfilter(aiterable, p, func):
    async for payload in aiterable:
        if p(payload):

            # This part isn't allowed, but hopefully it should be clear
            # what I'm trying to accomplish.
            yield func(payload)

questionAnswers(2)

yourAnswerToTheQuestion