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

如何从Promise中提取值?已能打印Promise返回前的结果

解决异步函数数据传递问题

首先要确保你的xmlHttpSend函数返回一个Promise,这样才能把异步获取的JSON数据传递出去:

function xmlHttpSend() {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    // 替换成你的实际请求地址和方法
    xhr.open('GET', '/your-api-endpoint', true);
    xhr.onload = function() {
      if (xhr.status >= 200 && xhr.status < 300) {
        // 解析返回的JSON数据
        const responseData = JSON.parse(xhr.responseText);
        // 把解析后的数据传递给后续的处理逻辑
        resolve(responseData);
      } else {
        reject(new Error(`请求失败,状态码:${xhr.status}`));
      }
    };
    xhr.onerror = function() {
      reject(new Error('网络请求出错'));
    };
    xhr.send();
  });
}

接下来,在countTotalInvItem函数里,你有两种方式获取异步返回的count值:

方式一:使用.then()链式调用

function countTotalInvItem() {
  xmlHttpSend()
    .then(data => {
      // 从返回的JSON中提取count值
      const totalCount = data.count;
      // 这里输出预期的1,也可以做DOM更新等操作
      console.log(totalCount);
    })
    .catch(err => {
      // 处理请求失败的情况
      console.error('获取数据失败:', err);
    });
}

方式二:使用async/await(更简洁的同步写法)

async function countTotalInvItem() {
  try {
    // 等待xmlHttpSend的异步操作完成,拿到返回数据
    const data = await xmlHttpSend();
    const totalCount = data.count;
    console.log(totalCount);
    // 这里可以继续用totalCount做其他业务逻辑
  } catch (err) {
    console.error('获取数据失败:', err);
  }
}

关键说明

异步操作不会立刻返回结果,所以不能直接在countTotalInvItem里调用xmlHttpSend后马上拿值——你拿到的会是一个未完成的Promise对象。必须通过Promise的.then()或者async/await等待异步操作完成,才能获取到实际的JSON数据和里面的count值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:01