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

使用async替代new Promise创建Promise失败,是否语法错误或不可行?

问题解答

你的代码不是语法错误,是对async函数的使用逻辑搞错了——async函数本身是一个函数,不是直接的Promise实例,你得先调用它,才能拿到它返回的Promise对象,之后才能用.then()。

你写的gets1是一个async箭头函数,但你直接用gets1.then(...),相当于给函数本身绑定then方法,这当然没用。正确的做法是调用gets1(),它会返回一个Promise,再调用then:

async function gets(){
    let gets1 = async()=>{
        return 45;
    }
    // 调用gets1函数,拿到返回的Promise后再绑定then
    gets1().then((value)=>{
        console.log(value, "inside gets1")
    })
}
gets()

运行这段修正后的代码,就能正常输出45 inside gets1了。

至于用async替代new Promise的场景:

  • 如果只是把同步值或者已有Promise包装成Promise返回,async函数完全可行,比如上面的例子,async箭头函数返回45,调用后就得到了resolve为45的Promise,和new Promise(resolve => resolve(45))效果一致。
  • 但如果要封装基于回调的异步操作(比如setTimeout、原生AJAX、Node.js的fs回调API),async函数没法直接替代new Promise,还是需要用new Promise把回调逻辑包裹起来,再结合async/await使用。比如:
// 用new Promise封装setTimeout
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

// 结合async/await使用
async function test() {
  await delay(1000);
  console.log("1秒后执行");
}
test();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:10:27