似乎无法让fetch()
在我的React Native应用程序中工作(应该开箱即用)。使用新的体系结构与RN 0.70.4
、TypeScript和一个设置来导入ES模块。
每次调用fetch()
时,在控制台中打印此错误:
'Tried to call timer with ID %s but no such timer exists.', 6
使用这个测试按钮:
<Button
title="Test"
onPress={async () => {
console.log('PRESSED');
const promise = fetch('https://www.google.com');
console.log('promise:', promise);
try {
const res = await promise;
console.log('res:', res);
} catch (err: unknown) {
console.log('err:', err);
}
}}
/>
按下后,控制台中只出现PRESSED
,没有其他日志消息。在Flipper网络面板中,看起来没有进行网络调用。
import fetch from 'cross-fetch';
时,我得到2行控制台输出:
18:17:27.196 32561 appname PRESSED
18:17:27.210 32561 appname 'promise:', { _h: 0, _i: 0, _j: null, _k: null }
之后就没有了;然而,奇怪的是,成功的网络调用出现在flipper网络日志中。
你知道这是怎么回事吗?
你应该使用async/await来获取。你看到{ _h: 0, _i: 0, _j: null, _k: null }
是因为网络调用需要一些时间来执行,你没有使用async/await,所以响应是一个未解决的承诺。您也可以使用.then
和.catch