使用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
相关产品推荐
相关产品推荐

