这里创建了一个根据接口去判断是否可以创建任务的函数,$fetch做了promise封装,为了避免多回调用了async,await做异步改同步;

  1. import store from "@/store/index"
  2. import { $fetch, msgToken } from "@/api/request"
  3. const releaseTaskCheck = async () => {
  4. let flag = false
  5. const res = await $fetch("/api/checkTaskPay", "", {
  6. token: msgToken({
  7. id: store.state.user.userId,
  8. name: store.state.user.name
  9. })
  10. })
  11. const code = Number(res.data.code)
  12. switch (code) {
  13. case 100:
  14. console.log(res.data)
  15. if (res.data.msg) {
  16. uni.showToast({
  17. title: res.data.msg,
  18. icon: "none"
  19. });
  20. flag = true;
  21. }
  22. flag = true;
  23. break
  24. case 101:
  25. flag = false
  26. break
  27. default:
  28. flag = false
  29. break
  30. }
  31. console.log(flag, "---")
  32. return flag
  33. }
  34. export default releaseTaskCheck

这里的console打印的是期望的值
image.png

但这样调用会返回一个pending态的promise,在[[PromiseValue]]中才是所需要的值

console.log(releaseTaskCheck(), "====")

image.png
如何拿到这个[[PromiseValue]]的值呢
有两种方式

  • 第一种是

    releaseTaskCheck().then(res=>{console.log(res)})
    
  • 第二种是再用async,await包裹一下,下边是示例 ```javascript const routerManager = debounce(async (url, …args) => { if (args.includes(‘releaseTaskCheck’)) {

      const res = await releaseTaskCheck()
      if (res) return
    

    } }, 300)

export default routerManager ```

疑问

为什么这两个在后边呢?
image.png
async函数为立即返回一个promise,函数内部的微任务在异步队列里等待执行
image.png
如过像上边那样再用await等待这个函数则会得到正常的返回值,因为await后边跟的就是一个promise,如果不是则转换成一个立即执行resolve的promise