这里创建了一个根据接口去判断是否可以创建任务的函数,$fetch做了promise封装,为了避免多回调用了async,await做异步改同步;
import store from "@/store/index"
import { $fetch, msgToken } from "@/api/request"
const releaseTaskCheck = async () => {
let flag = false
const res = await $fetch("/api/checkTaskPay", "", {
token: msgToken({
id: store.state.user.userId,
name: store.state.user.name
})
})
const code = Number(res.data.code)
switch (code) {
case 100:
console.log(res.data)
if (res.data.msg) {
uni.showToast({
title: res.data.msg,
icon: "none"
});
flag = true;
}
flag = true;
break
case 101:
flag = false
break
default:
flag = false
break
}
console.log(flag, "---")
return flag
}
export default releaseTaskCheck
这里的console打印的是期望的值
但这样调用会返回一个pending态的promise,在[[PromiseValue]]中才是所需要的值
console.log(releaseTaskCheck(), "====")
如何拿到这个[[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 ```
疑问
为什么这两个在后边呢?
async函数为立即返回一个promise,函数内部的微任务在异步队列里等待执行
如过像上边那样再用await等待这个函数则会得到正常的返回值,因为await后边跟的就是一个promise,如果不是则转换成一个立即执行resolve的promise