gpt4 book ai didi

javascript - undefined 不是对象(评估 Promise .then)

转载 作者:行者123 更新时间:2023-11-30 15:00:42 25 4
gpt4 key购买 nike

我在开发 React Native 移动应用程序时遇到此错误。

fetchDB 函数将返回一个 promise

 fetchDB(key) {
try {
AsyncStorage.getItem(key, result => {
return result;
});
} catch (error) {
console.log(error);
}
}
}

使用 .then() 从返回的 promise 中获取值

  getUserName = () => {
var user = Storage.fetchDB("username");
user.then(res => {
alert(res);
});
};

渲染红屏错误

undefined is not an object

最佳答案

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 方法更新为基于 promise 的。如果您无法访问该方法或不想触及它,也可以通过更新 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 抛出的任何错误。

关于javascript - undefined 不是对象(评估 Promise .then),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46582822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com