【发布时间】:2021-11-12 14:52:48
【问题描述】:
我正在使用 Ionic React 开发一个应用程序,它执行一些对 API 的 HTTP 请求。问题是我需要将请求的响应存储在本地存储中,以便在任何地方都可以访问它。我目前的做法是使用@ionic/storage:
let body = {
username: username,
password: password
};
sendRequest('POST', '/login', "userValid", body);
let response = await get("userValid");
if (response.success) {
window.location.href = "/main_tabs";
} else if (!response.success) {
alert("Incorrect password");
}
import { set } from './storage';
// Handles all API requests
export function sendRequest(type: 'GET' | 'POST', route: string, storageKey: string, body?: any) {
let request = new XMLHttpRequest();
let payload = JSON.stringify(body);
let url = `http://localhost:8001${route}`;
request.open(type, url);
request.send(payload);
request.onreadystatechange = () => {
if (request.readyState === 4 && storageKey) {
set(storageKey, request.response);
}
}
}
问题是当我得到userValid 键时,响应还没有回来,所以即使等待也会返回未定义。因此,我每次都必须发送另一个相同的请求,以便 Ionic 读取正确的值,这实际上是第一个请求的响应。除了每次执行请求时设置超时之外,还有其他正确的方法吗?
【问题讨论】:
-
您的问题是 sendRequest 正在触发异步 XMLHttpRequest 请求。您正在 sendRequest 方法完成之前检查存储。您需要修改此代码以使 sendRequest 异步并在该调用中利用 await。不过,还有其他方法可以在 ionic 中利用这种类型的功能。如果有机会,我会在答案中为您提供一个示例。
标签: reactjs ionic-framework xmlhttprequest