节点服务器async.each不等待响应并返回undefined

时间:2019-07-19 17:52:01

标签: javascript node.js reactjs

我试图读取一个字符串值(数据)数组,并使用async.each将每个字符串数据创建到服务器文件中。成功完成该函数后,将调用回调函数以将文件读入formdata并向后端服务发送发布请求。 console.log(response.data)控制台预期的响应,但客户端收到的响应“未定义”,错误为404。服务器不等待async.each完成,并向客户端返回未定义的响应。

我尝试创建一个异步主函数,并将整个async.each代码放入其中,然后等待响应发送回客户端。但是主要功能似乎并没有等待响应,因此功能中的控制台“未定义”。

        const { data } = req.body; // array of strings

        let parentPath = "./server/files/" ;
        let files = [];
        let fileName;
        const formData = new FormData();

    // create folder path if not exists
        if (!fs.existsSync(parentPath)) {
            fs.mkdirSync(parentPath);
        };

    // create file from each data string
        var asyncWrite = require('async');
        asyncWrite.each(
            data,
            function (fileXML, callback) {
                let dataIndex = data.indexOf(fileXML);
                fileName =  dataIndex + "_" + new Date(Date.now()).toISOString() + ".xml";
                files.push(fileName);
                console.log("2. writing files: ", fileName);
                fs.writeFile(parentPath + "/" + fileName, fileXML, function (err) {
                    if (err) {
                        console.log("3.a.error writing file: ", fileName, err);
                        return callback(err);
                    }
                    else {
                        console.log("3.b. " + fileName + ' was created.');
                        return callback();
                    }
                });
            },
            async function (err) {
                console.log("4.callback called");
                if (err) {
                    console.log('One of the file failed to process writing: ', err);
                    return {data: err};
                }
                else {
                    let readableStream;
                    console.log("5.reading files: ");
                    for (var i = 0; i < files.length; i++) {
                        readableStream = "";
                        console.log("6.reading file: ", files[i]);
                        readableStream = fs.createReadStream(parentPath + "/" + files[i]);
                        formData.append("files", readableStream, { filename: files[i], contentType: files[i].type });
                    }
                    const req = {
                        method: "post",
                        url: `${serverUrl}/createItem`,
                        headers: formData.getHeaders(),
                        data: formData
                    };
                    console.log("7.sending req1: ");
                    try {
                        const response = await axios(req);
                        console.log("8.response: ", response.data);
                        return response.data;
                    } catch (error) {
                        console.log("8.response error: “, error), 
                        return error;
                    }
                }
            });
        }
    }```

actual output: 
2. writing files:  0_2019-07-19T04:59:15.695Z.xml
3.b. 0_2019-07-19T04:59:15.695Z.xml was created.
4.callback called
5.reading files: 
6.reading file:  0_2019-07-19T04:59:15.695Z.xml
7.sending req1: 
8.response: {results: “success”}

Client Error: 404, Not Found
Client Response: undefined

0 个答案:

没有答案