如何从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
相关产品推荐
相关产品推荐

