async和promise 执行问题

image.png

image.png

上图是函数定义,下图是调用
红框处两个函数 调用的时候,得到的结果不一样。

大家帮忙看下红框处两个函数哪里有区别。感谢

阅读 2.4k
3 个回答

不贴代码,我很难给你做事呀😂
原因是await不是智能的,它并不知道你是想在successresolve
换言之,对于带异步过程而不返回Promise的函数而言,你必须得像第二段代码那样用Promise包装返回值、并指明在何处resolve,然后才能愉快地使用await
这样看来,似乎用await还要更麻烦一些,但是返回Promise的接口越来越多了,遇见一次包装一次就行了。
爪机打字太麻烦了,多多担待。

await 可以用于 Promise 或者 Promise Like(即含 then(callback) 方法的对象),并不能用于其它情况(比如问题中使用 .success(callback) 方法代替 .then 的对象)。

关于 async/await,请参阅这篇38万阅读量的文章:

对于问题中的情况,跟小程序的远程接口很像,所以可以参考下面这篇文章来解决(顺便说一句,新版的小程序接口已经支持 Promise,不再需要第三方封装了):

区别取决于msv.login.refreshToken函数的返回值(楼主没说,只能猜想)。

  1. 第一个红框写法的前提是msv.login.refreshToken函数的返回值是个Promise且fulfilled的value是res
  2. 第二个红框代码是把回调函数方式包裹成Promise的写法,一般用于把回调方式异步调用转成Promise方式。
    如果采用这种写法也间接说明msv.login.refreshToken函数的返回值不满条件1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏