W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
在 Tauri 中,異步函數(shù)以不會導(dǎo)致 UI 凍結(jié)或減速的方式執(zhí)行繁重的工作是有益的。
異步命令使用async_runtime::spawn
在單線程上執(zhí)行。不帶 async 關(guān)鍵字的命令將在主線程上執(zhí)行,除非使用 #[tauri::command(async)] 定義。
如果命令需要異步運(yùn)行,只需將其聲明為異步
即可。
使用 Tauri 創(chuàng)建異步函數(shù)時需要小心。目前,您不能簡單地在異步函數(shù)的簽名中包含借用的參數(shù)。此類類型的一些常見示例是 和 。此處跟蹤此限制:https://github.com/tauri-apps/tauri/issues/2533 和解決方法如下所示。
&str
State<'_, Data>
使用借用類型時,必須進(jìn)行其他更改。以下是您的兩個主要選項(xiàng):
選項(xiàng) 1:將類型(例如)轉(zhuǎn)換為未借用的類似類型,例如 。這可能不適用于所有類型,例如 .&str
String
State<'_, Data>
例:
// Declare the async function using String instead of &str, as &str is borrowed and thus unsupported
#[tauri::command]
async fn my_custom_command(value: String) -> String {
// Call another async function and wait for it to finish
some_async_function().await;
format!(value)
}
選項(xiàng) 2:將返回類型包裝在 Result
中。這個有點(diǎn)難實(shí)現(xiàn),但應(yīng)該適用于所有類型。
使用 return type ,替換為要返回的類型,或者如果您不希望返回任何內(nèi)容,則替換為錯誤類型,以便在出現(xiàn)問題或不希望返回任何可選錯誤時返回。例如:Result<a, b>
a
()
b
()
Result<String, ()>
返回一個 String,并且沒有錯誤。Result<(), ()>
不返回任何內(nèi)容。Result<bool, Error>
返回布爾值或錯誤,如上面的“錯誤處理”部分所示。例:
// Return a Result<String, ()> to bypass the borrowing issue
#[tauri::command]
async fn my_custom_command(value: &str) -> Result<String, ()> {
// Call another async function and wait for it to finish
some_async_function().await;
// Note that the return value must be wrapped in `Ok()` now.
Ok(format!(value))
}
由于從 JavaScript 調(diào)用命令已經(jīng)返回了一個 promise,因此它的工作方式與任何其他命令一樣:
invoke('my_custom_command', { value: 'Hello, Async!' }).then(() =>
console.log('Completed!')
)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: