chain futures instead of using completer