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

调用async函数返回[object Promise]无法获取实际返回值如何解决

问题根因

async函数的返回值会被自动包装为Promise对象,你在fetchAndStream中调用handleRequest()时没有使用await解析Promise的实际结果,直接拿到的是Promise实例,转字符串后就是[object Promise],拼接请求地址自然会出错。
你的代码还存在两个会触发运行错误的隐藏问题:

  • 定义fetchAndStream时没有声明接收request入参,调用时传入的event.request在函数内部无法获取,传给handleRequest时会传入undefined
  • uri变量未做声明就直接赋值,严格模式下会直接抛出语法错误,非严格模式下会污染全局作用域
修正代码

只需要在调用handleRequest时加上await等待结果返回,同时补全函数入参、声明局部变量即可:

addEventListener("fetch", event => {
  event.respondWith(fetchAndStream(event.request))
});

async function handleRequest(request) {
  var uri = request.url.replace(/^https:\/\/.*?\//gi, "/");
  return uri;
}

async function fetchAndStream(request) {
  // 加await解析Promise拿到实际uri字符串,同时用const声明局部变量
  const uri = await handleRequest(request);
  console.log(uri);
  let response = await fetch('http://blablabla.com/' + uri);

  const responseInit = {
    headers: {
      'Content-Type': 'application/octet-stream',
      'Content-Disposition': 'attachment; filename="file.m3u"',
    }
  };

  return new Response(response.body, responseInit)
}
优化建议

如果handleRequest内部没有其他需要await的异步操作(比如远程请求、KV存储读写等),可以直接去掉函数前的async关键字,将它改为普通同步函数,调用时不需要加await就能直接拿到返回值,减少不必要的Promise包装开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:15:41