我在尝试将本机数据存储在AsyncStorage中时遇到此错误,并且数据也未添加到存储中
可能未处理的承诺 拒绝(id:0):错误:com.facebook.react.bridge.ReadableNativeMap 无法转换为java.lang.String错误: com.facebook.react.bridge.ReadableNativeMap无法转换为 java.lang.String *
我的代码是这样的
//Public methods
static addProduct(id,name,qnty){
let product={
id:id,
name:name,
qty:qnty,
};
let cartResponse={};
product.rowId = this.generateHash(hashItem);
AsyncStorage.getItem('CART').then((data) => {
//Check if the product already in the cartTotalItem
if (data !== null && data.length>0) {
if (this.checkIfExist(product.rowId)) {
//Update product quantity
data[product.rowId]['qty'] += product.qty;
}else{
//Add add product to the storage
data[product.rowId] = product;
}
//Update storage with new data
AsyncStorage.setItem("CART", data);
cartResponse = data;
}else{
let cartItem ={};
cartItem[product.rowId] =product;
AsyncStorage.setItem("CART", cartItem);
cartResponse =cartItem;
}
return true;
}).catch(error => {
console.log("Getting cart data error",error);
return false;
});
}
我试图寻找解决方案,但发现其中很少有链接, Possible Unhandled Promise Rejection (id:0) Warning有点老,但是和我有同样的问题。
我尝试从线程中应用相同的解决方案,但是并没有解决问题。
有人可以帮忙吗? ?谢谢。
答案 0 :(得分:6)
该错误是由setItem
函数引起的。 setItem还会返回一个Promise,您的值应该是一个字符串。
样品
AsyncStorage.setItem("CART", JSON.stringify(cartItem));
答案 1 :(得分:0)
承诺链可能会令人困惑。潜在的问题是内部Promise拒绝没有链接到外部Promise。
const test = flag => {
return Promise.resolve('Happy')
.then(msg => {
if (flag === 0) return msg;
if (flag === 1) return Promise.reject('Kaboom!');
if (flag === 2) Promise.reject('Crash!');
})
.catch(err => {
return `Error: ${err}`;
});
};
test(0).then(res => log(res)); //'Happy'
test(1).then(res => log(res)); //'Error: Kaboom!'
test(2).then(res => log(res)); //'undefined' then UnhandledPromiseRejectionWarning
在上面的示例中,(0)退出时没有错误,(1)通过返回内部Promise的链接方式拒绝,(2)退出时没有错误,但显示了令人讨厌的警告。 因此,原始代码中的问题块应为:
if (data !== null && data.length>0) {
if (this.checkIfExist(product.rowId)) {
//Update product quantity
data[product.rowId]['qty'] += product.qty;
} else {
//Add add product to the storage
data[product.rowId] = product;
}
//Update storage with new data
cartResponse = data;
return AsyncStorage.setItem("CART", data); //chain the promises
} else {
let cartItem ={};
cartItem[product.rowId] =product;
cartResponse =cartItem;
return AsyncStorage.setItem("CART", cartItem); //chain the promises
}
通过返回AsyncStorage.setItem(...)
结果,外部捕获可以处理错误。
我意识到这是一篇过时的文章,但是这个问题过去使我感到困惑。希望这会为别人澄清一些事情。