3

运行以下代码时:

货运.toml

[lib]
crate-type = ["cdylib"]

[dependencies]
serde = { version = "1.0", features = ["derive"] }
wasm-bindgen = {version = "0.2.67", features = ["serde-serialize"] }
wasm-bindgen-futures = "0.4.17"

库文件

use serde::{Deserialize, Serialize};
use wasm_bindgen::prelude::*;

#[derive(Serialize, Deserialize)]
struct Output {
    strings: Vec<String>,
}

#[wasm_bindgen] //error occuring here
pub async fn return_strings(_input: &str) -> JsValue {
    
    //example function that returns a js value
    let strings: Vec<String> = Default::default();
    let output = Output { strings };
    
    JsValue::from_serde(&output).unwrap()
}

我收到以下错误:

*arg0活得不够长
借来的价值 活得不够长 论据要求*arg0借来'static

4

1 回答 1

2

当 Rust 假设返回的未来return_strings具有相同的生命周期时,会导致错误消息,_input即使它实际上并没有从中借用。基本上,去糖函数签名看起来像:

pub fn return_strings<'a>(_input: &'a str) -> impl Future<Output = JsValue> + 'a;

生成的代码想要一个有'static生命周期的未来,但返回的未来实际上以一个临时字符串变量的生命周期结束。

开发人员意识到了这个限制。可能最简单的解决方案是采用 own Stringor Box<str>argument 而不是借用&str.

于 2020-08-30T08:08:14.223 回答