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

如何在Promise中获取响应值与状态码,优化query返回逻辑?

解决方案

很简单,咱们只需要调整httpsGet函数的返回值,让它同时把响应状态码和内容一起传回来就行,完全不用全局变量。具体改法如下:

1. 修改httpsGet函数,返回状态码+响应体的组合

原来的httpsGet只返回了响应内容,现在让它resolve一个包含statusCode和body的对象,这样在query里就能同时拿到判断需要的两个关键信息:

const https = require('https');
function httpsGet(opts) {
  return new Promise((resolve, reject) => {
    const req = https.get(opts, (res) => {
      let body = '';
      res.on('data', (data) => {
        body += data.toString();
      });
      res.on('end', () => {
        // 这里修改:返回包含状态码和响应体的对象
        resolve({ statusCode: res.statusCode, body });
      });
    });
    req.on('error', (e) => {
      console.error(e);
      reject(e);
    });
  });
}

2. 在query函数里实现判断逻辑

现在await httpsGet(opt)会返回咱们需要的状态码和内容,直接解构后按照你的条件判断返回0或1即可;请求出错的话,catch块里返回0:

async function query(options) {
  options = options || {};
  options.timeout = options.timeout || 0;
  const opt = {
    hostname: 'encrypted.google.com',
    port: 443,
    path: '/',
    method: 'GET',
  };
  opt.agent = new https.Agent(opt);
  try {
    // 解构拿到状态码和响应体
    const { statusCode, body } = await httpsGet(opt);
    // 按照你的判断逻辑返回0或1
    return (statusCode === 301 && body.includes('google')) ? 1 : 0;
  } catch (error) {
    console.error(error);
    // 异常情况返回0
    return 0;
  }
}

测试代码不变

原来的自执行测试函数可以直接用,现在会输出0或1:

(async function () {
  const s = await query({ timeout: 1000 });
  console.log('Result: ' + s);
})();

这样改完之后,query()函数就只会返回0或1,完全符合你的要求,而且没有使用任何全局变量~

内容的提问来源于stack exchange,提问作者Sandra Schlichting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:47:41