首页 > 解决方案 > 为什么 response.json() 返回一个承诺?

问题描述

我有这个 JavaScript 获取函数

async getAllExpensesByUser() {
    let reponse = await fetch("router.php/getAll");
    console.log(reponse.json());
  }

也试过

getAllExpensesByUser = async () => {
    const response = await fetch("router.php/getAll");
    if (response.ok) {
      const jsonValue = await response.json();
      return Promise.resolve(jsonValue);
    } else {
      return Promise.reject("*** PHP file not found");
    }
  };

我的 router.php 文件有这个代码

   $data = $expensesController->getExpensesForUser($_SESSION['userid']);
   echo json_encode($data);

response.json()正在返回Promise {<pending>},我需要的结果在里面[[PromiseResult]]

标签: javascriptphpjson

解决方案


response.json()返回一个 Promise,因为此方法接受一个 Response并将其读取到完成,这是一个异步过程。您可以在规范中找到有关它的更多信息

您需要的只是在读取流的过程结束时等待,为此您也可以await使用

async getAllExpensesByUser() {
  let reponse = await fetch("router.php/getAll");
  let object = await response.json();
  return object
}

...

const userExpenses = await getAllExpensesByUser()
console.log(userExpenses) 

...

推荐阅读