首页 > 解决方案 > 在 Javascript 中进行 GET 时如何发送内容?

问题描述

我需要 GET 工作簿的所有数据,我尝试了一种方法,但它不能正常工作。问题是 Promise 正在返回第一个工作表的第一行,但它没有继续该过程工作表的其余行,分别是所有工作表,我不知道该怎么办。也许你知道..

所以我写了这段代码:

const SheetGet = {
    getSheet: (req, res) => {
        return new Promise ((resolve, reject) => {
            XlsxPopulate.fromFileAsync(filePath)
                .then(workbook => {
                    const wb = xlsx.readFile(filePath, {cellDates: true});
                    const sheetNames = wb.SheetNames;
                    sheetNames.forEach(function (element){
                        let endOfData = false;
                        let i = 2;
                        let dataArr = [];
                        while (endOfData === false){
                            let taskId = workbook.sheet(element).cell("A" + i.toString()).value();
                            if (taskId !== undefined){
                                res.send({
                                    type: 'GET',
                                    list_name: element,
                                    task_id: taskId,
                                    task_name: workbook.sheet(element).cell("B" + i.toString()).value(),
                                    task_description: workbook.sheet(element).cell("C" + i.toString()).value(),
                                    task_due_date: workbook.sheet(element).cell("D" + i.toString()).value(),
                                    task_priority: workbook.sheet(element).cell("E" + i.toString()).value(),
                                    task_status: workbook.sheet(element).cell("F" + i.toString()).value(),
                                    task_notes: workbook.sheet(element).cell("G" + i.toString()).value()
                                });
                                i++;
                            }
                            else {
                                endOfData = true;
                            }
                        }
                    })
                });
        })
    }
}

它只得到这个然后它停止,我需要从工作表中获取所有数据。

在此处输入图像描述

您对如何解决此问题有任何想法吗?或者让它发挥作用的正确方法?非常感谢您的时间和帮助!!!非常感谢每一个帮助!

PS我用“console.log”尝试了这段代码,效果很好,但问题是当我改为 时res.send,为了将信息发送给邮递员。

标签: javascriptnode.jspromisegetsend

解决方案


我假设您使用 express 作为框架,问题是当您使用 res.send 方法时,服务器已经将数据发送到客户端,而其余代码仍在后台运行。我要处理这个案子是这样的。

const SheetGet = {
    getSheet: (req, res) => {
        return new Promise ((resolve, reject) => {
            XlsxPopulate.fromFileAsync(filePath)
                .then(workbook => {
                    const wb = xlsx.readFile(filePath, {cellDates: true});
                    const sheetNames = wb.SheetNames;
                    sheetNames.forEach(function (element){
                        let endOfData = false;
                        let i = 2;
                        let dataArr = [];
                        while (endOfData === false){
                            let taskId = workbook.sheet(element).cell("A" + i.toString()).value();
                            if (taskId !== undefined){
                                dataArr.push({ // this one
                                    type: 'GET',
                                    list_name: element,
                                    task_id: taskId,
                                    task_name: workbook.sheet(element).cell("B" + i.toString()).value(),
                                    task_description: workbook.sheet(element).cell("C" + i.toString()).value(),
                                    task_due_date: workbook.sheet(element).cell("D" + i.toString()).value(),
                                    task_priority: workbook.sheet(element).cell("E" + i.toString()).value(),
                                    task_status: workbook.sheet(element).cell("F" + i.toString()).value(),
                                    task_notes: workbook.sheet(element).cell("G" + i.toString()).value()
                                });
                                i++;
                            }
                            else {
                                endOfData = true;
                            }
                        }
                    })
                    return res.json({ data: dataArr }); // this one
                });
        })
    }
}

虽然有一些不必要的代码,但你可以做的最少的改变就是上面的代码。

干杯。


推荐阅读