![](/img/trans.png)
[英][Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_ref.about')]
[英]undefined is not an object (evaluating Promise .then)
我在开发本机移动应用程序时收到此错误。
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);
});
};
其呈现红色屏幕并显示错误
未定义不是对象
1)您需要显式返回promise函数。 失败情况可以在catch回调中处理:
fetchDB(key) {
return AsyncStorage.getItem(key).catch(error => console.log(error));
}
fetchDB("username").then(res => alert(res));
2)只有当AsyncStorage.getItem
确实返回promise时,点(1)才AsyncStorage.getItem
。 如果不正确,则需要将AsyncStorage.getItem
方法更新为基于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本质,您不需要try-catch:
fetchDB(key) {
return new Promise((resolve, reject) =>
AsyncStorage.getItem(key, resolve)
)
}
fetchDB("username")
.then(res => alert(res))
.catch(error => console.log(error));
最后一个.catch
处理从fetchDB
Promise引发的任何错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.