Laravel多个请求订单

问题描述

在laravel应用程序中,当前有一个用户登录。我通过auth脚手架创建了登录名。他可以按下一个按钮,然后通过我的JavaScript代码在新标签页中执行获取请求。 get请求正在创建一个很大的pdf文件,需要花费一些时间来加载。如果用户不耐烦,即使第一个获取请求仍在运行,他也可以单击旧选项卡,然后再次按按钮。

现在会发生什么? 有两种选择:

  1. 第二个获取请求将在第一个获取请求完全执行之后执行
  2. 即使第一个请求尚未完成,第二个get请求也会开始。

我做了很多实验,经历了两种情况。如何运作?

编辑:这是我的代码

public function tmsheetsPanelPrintAll (Request $request)
    {
        ControllerFunctions::validate($request);
        

        //path vars
        $local_link_full = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix() . 'tmsheets\\tmpprint\\';
        $local_link_short = 'tmsheets\\tmpprint\\';
        $personalFolderName = FileHelper::emailToFilename(auth()->user()->email);

        //make directory
        Storage::disk('local')->makeDirectory($local_link_short . $personalFolderName);

        //helper
        $pdfhelper = new Pdfhelper();
        $pdfMerger = PDFMerger::init();
        
        $filteredTmsheetIds = $request->session()->get('filteredTmsheetIds');

        //generate a new pdf in the corresponding folder foreach timesheet in session
        foreach ($filteredTmsheetIds as $index) {
            //generate PDF
            $pdf = $pdfhelper->generateTMsheetPDF($index);
            $filename = $pdfhelper->getTMsheetsFilename();
            Storage::disk('local')->put($local_link_short . $personalFolderName . '\\' . $filename,$pdf->output()); 
            $pdfMerger->addPDF($local_link_full . $personalFolderName . '\\' . $filename,'all');
        }
        $pdfMerger->merge();
        Storage::disk('local')->deleteDirectory($local_link_short . $personalFolderName);
        $pdfMerger->save("file_name.pdf","browser");
    }

我正在使用domPdf和pdfMerger。除了在很长的计算时间内单击两次外,它都可以正常工作。注意:会话中有几个索引。如果我仅使用7个PDF索引来运行代码,那么即使单击两次也可以正常工作。然后,第一个请求似乎已完成,一切正常(请参见上面的情况1)。如果会话中有122个索引,则情况2发生。代码重叠,第一个请求完成,但是第二个请求返回错误:“ file_get_contents->打开流失败:没有这样的文件或目录”。 lara-pdf-merger \ src \ LynX39 \ LaraPdfMerger \ tcpdf \ tcpdi.PHP:121引发此错误。我认为是因为第一个请求在代码末尾删除文件,而第二个请求仍然尝试访问它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)