react-native 无法处理 try catch 块中的错误
Posted
技术标签:
【中文标题】react-native 无法处理 try catch 块中的错误【英文标题】:react-native fail to handle error in try catch block 【发布时间】:2019-02-11 20:25:27 【问题描述】:我正在尝试使用 fetch() 函数发送图像。显示红屏和。发送数据之前出现“没有这样的文件或目录”错误。 try catch 块没有处理这个错误。
019-02-11 22:35:00.375 [错误][tid:com.facebook.react.NetworkingQueue][RCTNetworking.mm:272] 错误处理请求正文:Error Domain=NSCocoaErrorDomain Code=260“文件“5325CBBA-340E-4227-AE17-5D42021DF648.jpg”不能 被打开,因为没有这样的文件。” UserInfo=NSFilePath=/Users/myuser/Library/Developer/CoreSimulator/Devices/9362AC50-7C82-4C8D-B686-39A6718CBA5F/data/Containers/Data/Application/64CD29E3-2BD9-4D9A-B168-4B12A848889C/Documents/images/ 5325CBBA-340E-4227-AE17-5D42021DF648.jpg, NSUnderlyingError=0x600003c0a790 错误域=NSPOSIXErrorDomain Code=2 "没有这样的文件或目录"
如何处理这个错误?
错误屏幕:https://i.hizliresim.com/bVvqrm.png
VeriListele()
try
db.transaction((tx) =>
tx.executeSql("select * from " + TABLO_DATA + " where " + ROW_GONDERILDI_ + "=0", [], (tx, results) =>
console.log("Query completed2");
// Get rows with Web SQL Database spec compliance.
console.log(results.rows);
var len = results.rows.length;
const data = new FormData();
for (let i = 0; i < len; i++)
try
let row = results.rows.item(i);
console.log(row);
var FotoString='';
if (row.resim1!='' && row.resim1!='undefined')
var resimjson=JSON.parse(row.resim1);
FotoString+='&photo[]='+row.resim1;
data.append('photo1[]',
uri: resimjson.uri,
type: resimjson.type, // or photo.type
name: 'photo'
);
if (row.resim2!='' && row.resim2!='undefined')
FotoString+='&photo[]='+row.resim2;
var resimjson=JSON.parse(row.resim2);
data.append('photo1[]',
uri: resimjson.uri,
type:resimjson.type, // or photo.type
name: 'photo'
);
if (row.resim3!='' && row.resim3!='undefined')
FotoString+='&photo[]='+row.resim3;
var resimjson=JSON.parse(row.resim3);
data.append('photo1[]',
uri: resimjson.uri,
type: resimjson.type, // or photo.type
name: 'photo'
);
if (row.resim4!='' && row.resim4!='undefined')
FotoString+='&photo[]='+row.resim4;
var resimjson=JSON.parse(row.resim4);
data.append('photo1[]',
uri:resimjson.uri,
type: resimjson.type, // or photo.type
name: 'photo'
);
if (row.video!='' && row.video!='undefined')
FotoString+='&video[]='+row.video;
var resimjson=JSON.parse(row.video);
data.append('video1[]',
uri: resimjson.uri,
type: resimjson.type, // or photo.type
name: 'video'
);
try
catch (error)
data.append('api_token', Global.GToken); // you can append anyone.
data.append('resid', row.id); // you can append anyone.
data.append('additional', row.ek_aciklama); // you can append anyone.
data.append('issue_date', row.tarih.split(' ')[0]); // you can append anyone.
try
fetch("https://myapi.com/add",
method: 'post',
body: data
).then(function(response)
console.log(response);
var responseJson=JSON.parse(response._bodyText)
// console.log();
console.log(response);
// console.log(responseJson);
// console.log(responseJson);
if (responseJson.sonuc == 1)
db.transaction((tx1) =>
console.log(row.id);
tx1.executeSql("update " + TABLO_DATA + " set gonderildi=1 where id=" + row.id + "");
);
else if (responseJson.sonuc==0)
console.log('basarisiz');
db.transaction((tx1) =>
// tx1.executeSql("update " + TABLO_DATA + " set gonderildi=1 where id=" + row.id + "");
);
).catch(error =>console.log(error) )
catch (error)
console.log('bb');
catch (error)
console.log('ss');
);
);
catch (error)
console.log('dd');
// const Veriler = await AsyncStorage.getItem(‘products’)
【问题讨论】:
您能否删除问题中注释掉的代码以使其更易于阅读? 另外,你能把你的错误屏幕附加到这篇文章吗?我没有打开那个链接,因为我不认识它。 不让我为新用户上传屏幕图像 我在该图像上得到了 403 【参考方案1】:我看到有关丢失文件的错误日志,但看不到它与 fetch
调用有何关系。你在发布那个文件吗?如果是这样,你能在你的代码中澄清一下吗?
如果您没有在fetch
调用中使用该文件,那么您需要弄清楚它在哪里被使用以及为什么它不在那里。
仅供参考,您在fetch
之后有一个.catch
,它会记录错误,然后防止任何fetch
错误被try/catch
捕获。
【讨论】:
给出错误,因为文件已被删除。如果文件已被删除,我想继续下一个过程而不是错误屏幕 你能在 for 循环中仔细检查你的 try/catch 块吗?那应该可以处理它,但是在循环结束时有一个额外的空try/catch
块。
我试过但没有工作:(。在红色错误屏幕后打破循环
您是说在for
循环之后 出现错误屏幕吗?我假设在data.append()
中访问uri
时会发生这种情况。
是的,在 for 循环中运行 fetch() 代码后打开错误屏幕。尝试 catch 块不起作用。代码正在运行,但由于找不到文件而显示错误屏幕。以上是关于react-native 无法处理 try catch 块中的错误的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 try-catch 处理未处理的 Promise Rejection