'Asynchronously deletes the documents with the corresponding document ids.
Identical to delete() except that it returns a future. Call
get_result() on the return value to block on the call and get its result.'

@datastore_rpc._positional(2)
def delete_async(self, document_ids, deadline=None):

    doc_ids = _ConvertToList(document_ids)
    if (not doc_ids):
        return _WrappedValueFuture([])
    if (len(doc_ids) > MAXIMUM_DOCUMENTS_PER_PUT_REQUEST):
        raise ValueError('too    many    documents    to    delete')
    request = search_service_pb.DeleteDocumentRequest()
    response = search_service_pb.DeleteDocumentResponse()
    params = request.mutable_params()
    _CopyMetadataToProtocolBuffer(self, params.mutable_index_spec())
    for document_id in doc_ids:
        _CheckDocumentId(document_id)
        params.add_doc_id(document_id)
    def hook():
        results = self._NewDeleteResultList(doc_ids, response)
        if (response.status_size() != len(doc_ids)):
            raise DeleteError('did    not    delete    requested    number    of    documents', results)
        for status in response.status_list():
            if (status.code() != search_service_pb.SearchServiceError.OK):
                raise DeleteError(_ConcatenateErrorMessages('one    or    more    delete    document    operations    failed', status), results)
        return results
    return _RpcOperationFuture('DeleteDocument', request, response, deadline, hook)
