Как на самом деле получить текст тела ответа в WASM-Bindgen и Rust - PullRequest
0 голосов
/ 17 января 2020

Может быть, это простой вопрос, но я еще нигде не нашел ответа. Я искал документацию, но единственный пример, который я нашел во всей inte rnet для web-sys fetch, до сих пор не решает эту проблему (официальные документы, не меньше).

Как вы получить тело ответа от веб-sys Request? У него есть все эти накладные расходы на JsFutures и развертывание, и я не могу найти правильный способ получить вещь, просто поместив мои данные в строку. Я просто пытаюсь извлечь файл с сервера (localhost dev) и затем проанализировать его как шейдер Vertex для программы WebGL, но я даже не могу получить его строку или прочитать из него каким-либо образом.

1 Ответ

0 голосов
/ 17 января 2020

Существует метод body для типа Response, см. https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Response.html#method .body

Существует также метод text, который возвращает Promise, который будет разрешить в JsValue

Взяв пример из https://rustwasm.github.io/wasm-bindgen/examples/fetch.html

Вы должны быть в состоянии сделать что-то вроде этого:

let mut opts = RequestInit::new();
opts.method("GET");
opts.mode(RequestMode::Cors);

let request = Request::new_with_str_and_init(
    "https://api.github.com/repos/rustwasm/wasm-bindgen/branches/master",
    &opts,
)?;

request
    .headers()
    .set("Accept", "application/vnd.github.v3+json")?;

let window = web_sys::window().unwrap();
let resp_value = JsFuture::from(window.fetch_with_request(&request)).await?;

// `resp_value` is a `Response` object.
assert!(resp_value.is_instance_of::<Response>());
let resp: Response = resp_value.dyn_into().unwrap();

// Convert this other `Promise` into a rust `Future`.
let text = JsFuture::from(resp.text()?).await?.as_string().unwrap();
...