implement promise adapters