[英]async await with promises is then block required
如何基本上异步等待正常? 我已经为AsyncStorage创建了一个帮助器,异步等待自动但是这个用户也必须使用async await
或promise方法来获取值吗?
此代码有效,但无法正确使用语法。
这是我的代码:
class AsyncStorageHelper {
static getItem = async (key: string) => {
let value: any = "";
try {
value = await AsyncStorage.getItem(key);
} catch (error) {
console.log(`Error item: ${value}`);
throw new Error(`Error ${value}`);
}
return value;
};
}
AsyncStorageHelper.getItem("logins")
.then(result => {
if (result) {
if (result === "1") {
navigate(SCREEN1);
} else {
navigate(SCREEN2);
}
}
})
.catch(err => {
navigate(LOGINSCREEN);
});
如何将AsyncStorageHelper
代码转换为异步等待取决于我想要导航到不同位置的结果。
异步函数和承诺返回函数可以以相同的方式在外部使用。
AsyncStorageHelper.getItem("logins")
.then(result => {
if (result) {
if (result === "1") {
navigate(SCREEN1);
} else {
navigate(SCREEN2);
}
}
})
.catch(err => {
navigate(LOGINSCREEN);
});
是相同的:
// note: this code must run in another async function
// so we can use the keyword await
try {
const result = await AsyncStorageHelper.getItem("logins");
if (result) {
if (result === "1") {
navigate(SCREEN1);
} else {
navigate(SCREEN2);
}
}
} catch (err) {
navigate(LOGINSCREEN);
}
注意:您的代码具有未知的代码路径。 当AsyncStorageHelper.getItem("logins")
返回一个假值时会发生什么? 你基本上有一个noop,这可能不是理想的行为。
必须在异步函数中使用await。
async function helper() { try { const result = await AsyncStorageHelper.getItem("logins"); if (result) { if (result === "1") { navigate(SCREEN1); } else { navigate(SCREEN2); } } } catch (error) { navigate(LOGINSCREEN); } } helper()
class AsyncStorageHelper {
static async getItem(key : string) {
let value: any = ""
try {
value = await AsyncStorage.getItem(key)
} catch (error) {
console.log(`Error item: ${value}`)
throw new Error(`Error ${value}`)
}
return value
}
}
try {
const result = await AsyncStorageHelper.getItem("logins")
if (result)
(result === "1") ? navigate(SCREEN1): navigate(SCREEN2)
} catch(err) {
navigate(LOGINSCREEN)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.