Есть ли способ, которым мы можем преобразовать фьючерсы 0.1 в стандартные библиотечные фьючерсы? - PullRequest
0 голосов
/ 29 октября 2019

Функция async / await скоро появится, но есть много библиотек, все еще использующих фьючерсы 0.1. Как мы конвертируем между ними?

Преобразование асинхронного будущего в 0,1 будущее охватывает преобразование асинхронного будущего в 0,1 будущее.

Как стеретьтип будущего в новом будущем API? говорит о функции async, которая вызывает будущее с 0.1 и получает результат, но где макрос await!(), который я могу импортировать? Кажется, он больше не компилируется.

struct A_future01;

impl A_future01 {
    pub fn exec1() -> Box<dyn Future<Item=String, Error=()>> {
        Box::new(futures::future::result("ok"))
    }

    pub fn exec2() -> Box<dyn Future<Item=String, Error=()>> {
        Box::new(call().unit_error().boxed().compat()) //Like this## Heading ##?
    }
}

async fn call() -> Result<(), Box<dyn std::error::Error>> {
    let result_from_a = A_future01::exec().await(); //how can I achieve this ?
    Ok(())
}

1 Ответ

1 голос
/ 29 октября 2019

Используйте черту Future01CompatExt:

use futures01::future as future01;
use futures03::compat::Future01CompatExt;

fn make_future_01() -> impl future01::Future<Item = i32, Error = ()> {
    future01::ok(2)
}

async fn example_03_uses_01() -> Result<i32, ()> {
    let v = make_future_01().compat().await?;
    Ok(v)
}
[dependencies]
futures03 = { package = "futures-preview", version = "0.3.0-alpha.19", features = ["compat"] }
futures01 = { package = "futures", version = "0.1.29" }
...