2

我正在使用 react-native fs 将内容从 CMS 下载到 react-native 应用程序中。这个想法是使用该应用程序来提供在线内容/网站以供离线使用。该应用程序在 Android 上运行良好而不会引发任何错误,但在 iPad (ios 11.4) 上下载永远不会完成。这是我与该函数一起使用的 App.js 的一部分,它在 iPad 上引发错误:

import React, {Component} from 'react'
import {
Platform,
StyleSheet,
Text,
View,
WebView,
Button,
Alert,
NetInfo,
StatusBar,
Modal,
TouchableOpacity,
Image
} from 'react-native'

import RNFS from 'react-native-fs'

export default class App extends Component {
    const path = RNFS.DocumentDirectoryPath + '/assets/' + saveAs
    let pp = path.split('/')
    pp.pop()

    return RNFS.mkdir(pp.join('/'), {NSURLIsExcludedFromBackupKey: true}).then(() => {
        const download = RNFS.downloadFile({
            fromUrl: url,
            toFile: path,
            discretionary: true,
            progress: (res) => {
                const tmp = this.state.bytesWritten
                tmp[res.jobId.toString()] = res.bytesWritten
                this.setState({bytesWritten: tmp})
            },
            begin: (res) => {
                this.setState({
                    contentLength: this.state.contentLength + res.contentLength
                })
            },
            readTimout: 15000
        })
        return download.promise.then((res) => {
            return res;
        })
        .catch((error) => {
            console.warn('An error occured while downloading: ' + error);
            console.warn('Current URL: ' + url);
        });
    })
    .catch ((error) => {
        console.warn('An error occured while creating directory: ' + error);
    });
}

函数 downloadAndSave 在另一个函数中调用,如下所示:

let pr = []
// d are the files that need to be downloaded, around 250-300
d.forEach((elem) => {
    pr.push(this.downloadAndSave(elem.name, elem.saveAs));
})
return Promise.all(pr);

错误总是来自捕获块“下载时发生错误:”。抛出的错误以及受影响 URL 的数量不同。

发生的错误消息是(已翻译,因此它们可能有点偏离):

  • 请求/处理无法完成
  • 请求超时
  • POSIX 错误 -9805 - 未知错误:-9805

该错误在下载大约 50-70% 的文件后发生,然后从未完成,但在 80-90% 左右停止。

我的问题是问题是否与超时有关或可能与许多回调有关?有没有其他人在 react native fs 遇到过这样的问题,或者有人知道如何解决这个问题。恐怕我什至无法真正查明问题所在。任何帮助都深表感谢!

4

1 回答 1

0

你有没有尝试添加background: trueRNFS.downloadFile({background: true})的选项?

于 2019-01-24T05:52:58.193 回答