Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在expressJs中完成实用程序执行后返回REST API响应_Javascript_Node.js_Express_Setinterval_Es6 Promise - Fatal编程技术网

Javascript 如何在expressJs中完成实用程序执行后返回REST API响应

Javascript 如何在expressJs中完成实用程序执行后返回REST API响应,javascript,node.js,express,setinterval,es6-promise,Javascript,Node.js,Express,Setinterval,Es6 Promise,我已经用带有节点的expressJS编写了一个POST端点。当我调用API时,它会使用setInterval()运行一个实用程序,我希望在实用程序执行clearInterval()后发送API响应。 如何在实用程序执行完成后等待并发送响应? 请参阅下面的代码 REST API代码: const router= express.Router(); const multer= require('multer'); const {readCSVFile}= require('../util/index

我已经用带有节点的expressJS编写了一个POST端点。当我调用API时,它会使用setInterval()运行一个实用程序,我希望在实用程序执行clearInterval()后发送API响应。 如何在实用程序执行完成后等待并发送响应? 请参阅下面的代码

REST API代码:

const router= express.Router();
const multer= require('multer');
const {readCSVFile}= require('../util/index');
var storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'uploads');
    },
    filename: (req, file, cb) => {
        cb(null, file.fieldname + '-' + Date.now()+'.xlsx');

    }
});
var upload = multer({storage: storage});
router.post('/fileUpload', upload.single('filename'),   async (req, res) => {
    readCSVFile();
    res.status(201).json({id:1});
});
router.get('/',(req,res)=>{
    res.sendFile(__dirname+'/index.html');
});

module.exports=router;


实用代码

const config = require('config')
const excelToJson = require('convert-excel-to-json')
const HttpsProxyAgent = require('https-proxy-agent')
const AWS = require('aws-sdk')
const json2xls = require('json2xls')
const fs = require('fs')
const awsConfig = {
    httpOptions: {
        agent: new HttpsProxyAgent(
            config.get('aws.proxy')
        ),
    }
}
AWS.config.credentials = new AWS.SharedIniFileCredentials({
    profile: config.get('aws.profile'),
})
AWS.config.update(awsConfig)

let uuidv4 = require('uuid/v4')
let csv = [];

const lexRunTime = new AWS.LexRuntime({
    region: config.get('aws.region'),
})
let refreshId
const readCSVFile = () => {

    const csvSheet = excelToJson({
        sourceFile: './Test.xlsx',
    })
    csvSheet.Sheet1.forEach(element => {
        csv.push((element.A.slice(0, element.A.length)))
    })
    runTask()
    refreshId = setInterval(runTask, 1000)
}
let botParams = {
    botAlias: config.get('bot.alias'),
    botName: config.get('bot.name'),
    sessionAttributes: {},
}
const missedUtterancesArray = []
const matchedUtterancesArray = []
let start = 0
let end = 50
let count = 50

const runTask = () => {
    let itemsProcessed = 0
    console.log('executing...')
    const arrayChunks = csv.slice(start, end)
    arrayChunks.forEach((element) => {
        botParams.inputText = element
        botParams.userId = `${uuidv4()}`
        lexRunTime.postText(botParams, function (err, data) {
            itemsProcessed++
            if (err) console.log(err, err.stack)
            else {
                if (data.intentName === null) {
                    missedUtterancesArray.push({
                        Utterance: element,
                    })
                }
                else{
                    matchedUtterancesArray.push({
                        Utterance: element,
                    })
                }
            }
            if (itemsProcessed === arrayChunks.length) {
                start = csv.indexOf(csv[end])
                end = start + count
            }
            if (start === -1) {
                let xls = json2xls(missedUtterancesArray)
                fs.writeFileSync('./MissedUtterances.xlsx', xls, 'binary')
                let matchedXls = json2xls(matchedUtterancesArray)
                fs.writeFileSync('./MatchedUtterances.xlsx', matchedXls, 'binary')
                console.log('File saved successfully!! ')
                console.log('Total Matched utterances count: ',csv.length-missedUtterancesArray.length)
                console.log('Total Missed utterances count: ',missedUtterancesArray.length)
                console.log('Total Utterances count: ',csv.length)
                clearInterval(refreshId)
            }
        })
    })
}


我需要更多的信息来回答这个问题,但请原谅我的尝试,如果这不起作用-

readCSVFile中的setInterval方法可以解释原因。作为一个异步函数,这不会停止代码进程


lexRunTime.postText看起来也是异步的。我认为你最好在回应客户时使用承诺

只有当您向我们展示相关代码时,我们才能为您提供帮助,因为答案完全取决于您的代码在做什么。有关代码的问题需要向我们展示您的代码。我在实用程序代码中没有看到任何导出。怎么装的?其中的函数是如何调用的?你如何与它沟通?您希望在休息路线中在哪里使用它?您需要在这里给我们更多的解释。请看,如果您的实用程序必须在每个或某些端点之前运行,我建议您将其作为中间件编写。