【问题标题】:JavaScript, Promise {<pending>}JavaScript,承诺 {<pending>}
【发布时间】:2020-07-03 01:59:37
【问题描述】:
async function db(path){
  const res = await fetch('data.json');
  const data = await res.json();
  return data[path];
}

console.log(db("name"));

我怎样才能修复 Promise {pending} 我正在尝试从我的代码中的任何位置获取对我的数据库 json 文件的全局访问,这是正确的方法还是有更好的方法?

【问题讨论】:

  • async 函数将始终返回一个 Promise。在返回的承诺上使用.then(),这样您就可以在承诺解决时提供回调(或.catch(),如果承诺拒绝)
  • 你是如何使用这个功能的?您发布的代码很好。
  • 我正在尝试获取对我的 json 数据库的全局访问权限,如果有人知道,我找不到任何示例,请给我一些代码

标签: javascript json promise async-await fetch


【解决方案1】:

问题是您有一个返回承诺的异步函数,但您以非异步方式调用它。你应该做的就是在你的调用之前添加一个等待:

async function db(path){
  const res = await fetch('data.json');
  const data = await res.json();
  return data[path];
}

console.log(await db("name"));

【讨论】:

  • console.log(await db("name")); await 不应该在这里工作。
  • @SajeebAhamed 为什么?
  • "await 仅在异步函数中工作"据我所知。
  • @SajeebAhamed 它也适用于 V8 的全局范围。只需打开您的开发工具并编写: var dummyPromiseFunction = () => new Promise((resolve) => { setTimeout(() => resolve(100), 100);} );异步函数测试(路径){ const data = await dummyPromiseFunction();返回数据; } console.log(await test());
  • @woXrooX 堆栈溢出时 cmets 中的错误格式。只需粘贴 console.log(await fetch("google.com"))
【解决方案2】:

函数的返回只是返回另一个promise。所以你可以像这样修改你的函数-

async function db(){
  const res = await fetch('data.json');
  const data = await res.json();
  return data;
}

db().then(data => console.log(data['name']);

注意:您不应该从异步函数返回任何内容。你应该在函数内做你想做的事

【讨论】:

  • 成功了,谢谢!这是获得全局访问我的数据库的唯一方法吗?还是我应该使用其他方式?
  • 异步操作应该这样做。您可以使用 react/vue/angular 或任何其他 javascript 库来进行数据反应。您可以在其中设置/更新可用性数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2019-02-02
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多