javascript - 如何在 react.js 中实现 jszip

标签 javascript api promise redux-saga jszip

我正在尝试在通过 http 请求发送之前压缩文件列表。但我被困在这里。

export default function zipTargetFiles(files) {
    if (files.length <= 1) {
        return files;
    } else {
        const zip = require('jszip')();
        for (let i = 0; i < files.length; i++) {
            zip.file(files[i].name, files[i]);
    }
    return zip.generateAsync({type:"blob"});
}

}

基本上,该函数接收文件列表并尝试将它们压缩到一个 .zip 文件中。但是当我将它作为形成的数据发送出去时,它给出了提交的数据不是文件的错误。

我检查了 header 中的有效负载,目标字段为 [object Promise] .如何真正返回 .zip 文件?

现在我可以在 Redux-saga 中捕获 zip 文件,但是当我将它保存在我的数据库中时它没有给出扩展名,而是它只给出了“blob”的名称。

传奇.js
const file = yield call(zipTargetFiles, files);
const formData = new FormData();
formData.append("coversheet", file);
const reponse = yield call(apiRequest, formData);

最佳答案

发生的事情是 .generateAsync正在返回一个 promise 。您必须等到 promise 被履行或被拒绝后才能使用数据。

Promises 是 JS 中处理异步操作时的核心概念。您可以阅读有关 promise 的更多信息 here

import zipTargetFiles from '/path'

zipTargetFiles( data ).then(file => {
 // Access your file here
})

关于javascript - 如何在 react.js 中实现 jszip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882703/

相关文章:

javascript - Edge浏览器无法触发iframe onload

javascript - XHR 持久连接,怎么回事?

php - 如何使用 YouTube Data API v3 检查 YouTube 视频是否存在

javascript - 嵌入式 iframe 元素无法与 youtube iframe api 一起使用

javascript - 链接 Javascript promise

javascript - 我如何在 angularjs promise 中解析这个结果

api - YouTube API v3.0 : How do you determine if a video is 'pay-per-view' ?

javascript - Promise 实现问题,异步无法正常工作

javascript - 尝试重新创建 JSON 数组,但它返回相同的第一个元素

javascript - 定义的函数坚持其未定义的