import { Geolocation } from "@capacitor/geolocation";
const request_perm = () => {
try {
const stuff = Geolocation.requestPermissions();
console.log(stuff, "stuff");
} catch (err) {
console(err, "err");
}
};
如您所见,对
Geolocation.requestPermissions
的调用被包装在 try block
中,所以我不明白为什么它仍然是一个未捕获的错误:
编辑: 如果像这样使用
await
,错误就会消失:
const request_perm = async () => {
try {
const stuff = await Geolocation.requestPermissions();
console.log(stuff, "stuff");
} catch (err) {
console.log(err, "err");
}
};
它仍然没有实现,但是错误现在被 catch 块捕获。
你必须了解 javascript 如何解决这个问题。 这里是关于js事件循环和回调队列的很好的解释。
简而言之,Gelocation.requestPermissions()函数返回一个Promise,这意味着它是一个异步函数。如果它没有在异步函数中调用并且await子句不在调用前面,则javascript引擎不会等到promise解决后运行其余的函数。
这意味着
console.log
调用下方的 requestPermissions
将运行,并且 try-catch 子句将在 Promise 确定之前结束 -> 在任务队列中等待(实际上是 microstask 队列) -> 等待回调队列为空