Javascript 检查是否使用wait调用js函数?
我有一个Javascript 检查是否使用wait调用js函数?,javascript,async-await,Javascript,Async Await,我有一个checkPermission功能,在该功能中,我拉会话,访问数据库并确认权限。如果不允许该操作,函数将抛出 await checkPermission("USER_READ"); // This will throw if not permitted. // Do permission specific stuff. 问题是,若我忘记了等待,它将不会等待并移动到未经许可的代码。如果使用了await,我可以通过编程方式签入checkPermission函数吗?如果未
checkPermission
功能,在该功能中,我拉会话,访问数据库并确认权限。如果不允许该操作,函数将抛出
await checkPermission("USER_READ"); // This will throw if not permitted.
// Do permission specific stuff.
问题是,若我忘记了等待,它将不会等待并移动到未经许可的代码。如果使用了await
,我可以通过编程方式签入checkPermission
函数吗?如果未使用await
,我可以抛出该函数吗?或者有没有其他方法可以对给定的函数强制执行wait
,如果不使用则抛出
注意:我知道我可以把它放在if中,然后检查它是否返回
Promise
。但这不是我要问的。通过使用eslint并将其作为CI管道的一部分添加,您可以轻松完成这一任务
不允许没有等待表达式的异步函数
(需要等待)
解决这个问题的最好方法是使用一个过梁,如果由于某种原因不能,可以执行运行时检查
。然后确实调用了,如果没有调用,则记录警告或其他内容
const mustCallThen=fn=>(…args)=>{
常量超时=设置超时(()=>{
console.warn(fn,'.then未调用')
})
const then=(解析、拒绝)=>{
clearTimeout(超时)
返回fn(…参数)。然后(解析、拒绝)
}
返回{then,catch:reject=>then(null,reject)}
}
异步函数检查权限(权限){
//一些异步代码
返回真值
}
//用法示例:
const yo=mustCallThen(checkPermission)
//yo现在是相同的函数,但如果在以下情况下没有立即调用,则会警告您
yo()
//将记录:
//异步函数checkPermission(permission)。然后未调用
wait yo()//将不记录
使用一根短绒。没有办法“强制”等待承诺,这根本不受其设计方式的支持。检查此项我知道这不会回答您的问题,但:使用“默认拒绝”权限检查是否比依赖抛出的错误更好?在我看来,授予的权限越少越好。不,忘记wait
就像忘记了整个检查,您所能做的就是记住执行它。或者,您可以返回包含受限api的对象,因此您需要等待该对象继续。
eslint require-await: "error"