You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在请求成功完成后执行callback方法?回调不触发问题求助

问题根因与修复方案
  • 你在.end()中直接写callback()属于立即执行函数,会在sendSearchRequest调用时就触发callback,而非请求结束后执行。end方法需要接收函数引用作为参数,而非函数执行结果。
  • 你使用了async/await语法,但常规的request库默认是回调风格,不返回Promise实例,await不会等待请求完成,逻辑执行顺序不符合预期。
  • 存在笔误:consolel.log多写了一个字母l,会触发未定义方法报错。
  • 若downloadPDFsOfPage为异步方法,当前循环调用不会等待其执行完成,callback触发时可能PDF相关逻辑还未跑完。

完整修复代码(适配async/await语法,保证所有逻辑执行完成后触发callback)

async function sendSearchRequest(config, search_url, message, ambiente, callback){
      const options = {
        'method': 'POST',
        'url': 'https://www.example.com',
        'headers': {
          // 原有header配置
        },
        form: {/* 原有表单配置 */}
      };
      // 把回调风格的request包装为Promise适配await
      const requestTask = new Promise((resolve, reject) => {
        request(options, async function (error, response) {
          if (error) {
            console.log("Error!----------------------------", error);
            return reject(error);
          }
          const $ = cheerio.load(response.body);
          const szPages = $('#divResultadosSuperior').find('table > tbody > tr > td:first-child').text();
          const szTexts = szPages.split(' ');
          const nPages = Math.ceil(szTexts[szTexts.length - 2] / 10);
          console.log("This is Number of Page: -----------", nPages);
          // 等待所有PDF下载任务完成
          const downloadTasks = [];
          for(let i = 1; i <= nPages; i ++)
          {
            downloadTasks.push(downloadPDFsOfPage(i, response.headers['set-cookie'][0], pdf_lists, search_url, message));
          }
          await Promise.all(downloadTasks);
          resolve();
          //await scrapPdf(response.body, response.headers['set-cookie'][0]);
        })
      })
      // 等待所有请求、业务逻辑执行完成后再调用callback
      await requestTask;
      callback();
    }

最简修复方案(仅修复callback调用时机,不调整原有逻辑结构)

仅修改.end的传参,去掉callback后的括号,传入函数引用而非执行结果即可:

.end(callback)

注意该方案不会等待downloadPDFsOfPage的异步逻辑执行完成,callback触发时PDF下载任务可能还在运行。

内容的提问来源于stack exchange,提问作者dev-ninja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:15:03