繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM