我在开发反应原生移动应用程序时遇到此错误。
fetchDB
函数将返回一个承诺
fetchDB(key) {
try {
AsyncStorage.getItem(key, result => {
return result;
});
} catch (error) {
console.log(error);
}
}
}
使用.then()
getUserName = () => {
var user = Storage.fetchDB("username");
user.then(res => {
alert(res);
});
};
呈现红色屏幕时显示错误
undefined不是对象
答案 0 :(得分:2)
1)您需要显式返回promise函数。失败情况可以在catch回调中处理:
fetchDB(key) {
return AsyncStorage.getItem(key).catch(error => console.log(error));
}
fetchDB("username").then(res => alert(res));
2)只有当AsyncStorage.getItem
真正返回承诺时,Point(1)才有效。如果不成立,那么您需要将AsyncStorage.getItem
方法更新为基于承诺的方法。如果您无法访问该方法或不想触摸它,也可以通过以下方式更新fetchDB
功能来解决问题:
fetchDB(key) {
return new Promise((resolve, reject) => {
try {
AsyncStorage.getItem(key, resolve);
}
catch (error) {
reject(error);
}
})
}
fetchDB("username")
.then(res => alert(res))
.catch(error => console.log(error));
3)我甚至会说,由于es6 Promises性质,你不需要尝试捕获:
fetchDB(key) {
return new Promise((resolve, reject) =>
AsyncStorage.getItem(key, resolve)
)
}
fetchDB("username")
.then(res => alert(res))
.catch(error => console.log(error));
最后.catch
处理从fetchDB
承诺中抛出的任何错误。