Как настроить браузер для ожидания ответа перед отправкой другого запроса в MEAN-приложении - PullRequest
0 голосов
/ 16 октября 2018

У меня есть MEAN-приложение, которое запускает тестовые наборы для множества приложений с одинаковым кодированием.Я посылаю запрос, который запускает запуск тестовых примеров в приложении через Angular6, в ExpressJS.Поскольку существует задержка в получении ответа, браузер повторно отправляет запрос, что вызывает повторный запуск процесса.

Я использовал windows.location.reload(), и это не позволяло браузеру повторно отправлять запрос.Но браузер не получит ответ, который сервер отправит после завершения процесса.

Ниже приведен мой экспресс-код:

router.post("/trainee", (req, res, next) => {
    var empList = req.body.empList;
    var scriptCount = 0
    asyncLoop(empList, (empId, next) => {
        req.body.empId = empId;
        console.log("started Script", "empId : " + empId);
        return testunzip.decompress(req, res).then((msg) => {
            console.log("decompressed: ", msg);
            return testunzip.makeTempsolution(req, res).then((msg) => {
                console.log("temp soln : ", msg);
                return storage.testing(req, res).then((msg) => {
                    console.log("testing : ", msg);
                    return storage.fetchMarks(req, res).then((data) => {
                        data = jsonReport.parser(data, req, res)
                        scriptCount++
                        console.log("data in call: ", data)
                        next();
                    })
                })
            })
        }).catch((err) => {
            console.log(err.message)
            next();
        })
    }, (err) => {
        if (err) {
            console.error('Error: ' + err.message);
        }
        console.log('Evaluation completed for !' + scriptCount + ' scripts');
        res.send("Done!")
    })
})

Это мой угловой код:

evaluateScript(data) {
  this.traineesResult = null;
  this.errorMessage = null;
  data.empList = this.empList;
  data.folderName = this.folderName;
  this.service.evaluateScript(data).subscribe(
     (result) => { this.traineesResult = result },
     (err) => { this.errorMessage = err.error.message }
   )
   window.location.reload()
 }

Как мне выполнить мое требование?Любые указатели будут полезны.

...