問題
我目前正在研究 UI,我使用 React。在.jsx組件內部,我擁有一切:HTML (JSX)、JavaScript-Logic 和 API 呼叫。一切都在一個檔案中,這會變得混亂。
目標
我想外包功能,所以我創建了一個應該處理所有 API 呼叫的類。我也想使用 RxJS 并將 axios 與 RxJs 結合起來。
代碼
代碼中發生了什么?我有一個類APICALLS包含靜態方法putApiCallExample。在那里,我進行了 api 呼叫,但使用axios創建了一個 Promise 。我使用from()功能形式 rxjs 創建一個 observable 并在管道內回傳資料。
在Main.jsx 中,我在useEffect()-hook 中使用它,我訂閱它并基于它設定狀態。
class ApiCalls:
static putApiCallExample(URL, data){
const promise = axios
.put(URL, data, {
headers: {
"Content-Type": "application/json"
}
});
return from(promise).pipe(map(res => res.data));
}
const Main = () => {
const [show, setShow] = useState(false);
useEffect(() => {
ApiCalls.putApiCallExample().subscribe(
res => {
console.log("1", res);
setShow(true);
},
err => {
console.log("2", err)
}
);
}, [])
}
題
- 我可以在axios 中使用與.then ()相同的subscribe()功能嗎?
- 我需要在這里取消訂閱嗎?
- 這是否會導致混合 axios 和 rxjs 的性能問題?
uj5u.com熱心網友回復:
我假設如果你使用 Axios,你不需要像 SSE 或 websocket 那樣從服務器接收多個回應。所以:
我可以在 axios 中使用與 .then() 相同的 subscribe() 功能嗎?
在某種程度上,是的,當 Axios 承諾決議時會觸發 observable 訂閱回呼。然后它將不再被觸發,因此在這種特定情況下,RxJs observable 的行為方式與 Axios 承諾相同。
我需要在這里取消訂閱嗎?
由于 Observable 不能被觸發超過 1 次,我看不出有任何退訂的理由。
這是否會導致混合 axios 和 rxjs 的性能問題?
您只是將 Axios 承諾包裝到 RxJs 可觀察物件中。這個 RxJs 包裝器不會有重要的記憶體或 CPU 藍圖。
順便說一句,這基本上就是 Angular Http 客戶端在內部所做的事情。我的觀點是它是安全的,但它也沒有帶來太多的價值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370679.html
標籤:javascript 异步 承诺 rxjs
上一篇:ASP.NETCore異步API端點回傳實際有效負載資料旁邊的額外屬性
下一篇:如何控制異步函式的流程?
