async返回的就是Promisereturn就相当于Promise.resolve()await等待如果是Promise就会终止异步,等待Promise,请问一下下面两个写法,为什么会打印不同functionfn1(){returnnewPromise((resolve,rejec)=>{setTimeout(()=>{resolve(1)},2000)})}fn1().then(data=>{console.log(data)//1})asyncfunctionfn2(){setTimeout(()=>{//这里的return不是相当于resolve(2)return2},2000)}fn2().then(data=>{console.log(data)//直接执行打印undefined})
2 回答
浮云间
TA贡献1829条经验 获得超4个赞
setTimeout回调函数里的return不等于resolve,setTimeout回调函数的返回值没有任何地方接收会被直接丢弃,fn2应该没有返回任何值,就是undefined。fn返回的Promise并没有等两秒,而是瞬间就resolve(undefined)。async修饰的是fn2函数,只有fn2函数的返回值才会被包装为Promise对象,而setTimeout回调函数不是fn,它的返回值不会被Promise包装。
侃侃尔雅
TA贡献1801条经验 获得超16个赞
fn2函数返回值是undefinedsetTimeout内部的函数的返回值和fn2的返回值并没有直接关系啊await函数可以这样理解:调用后返回Promise.resolve(函数的返回值)
添加回答
举报
0/150
提交
取消