浏览器未实现Geolocation.requestPermissions,并且错误始终未被捕获?

问题描述 投票:0回答:1
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 reactjs google-chrome frontend capacitor
1个回答
0
投票

你必须了解 javascript 如何解决这个问题。 这里是关于js事件循环和回调队列的很好的解释。

简而言之,Gelocation.requestPermissions()函数返回一个Promise,这意味着它是一个异步函数。如果它没有在异步函数中调用并且await子句不在调用前面,则javascript引擎不会等到promise解决后运行其余的函数。

这意味着

console.log
调用下方的
requestPermissions
将运行,并且 try-catch 子句将在 Promise 确定之前结束 -> 在任务队列中等待(实际上是 microstask 队列) -> 等待回调队列为空

© www.soinside.com 2019 - 2024. All rights reserved.