Javascript 为什么response.json()返回承诺?

Javascript 为什么response.json()返回承诺?,javascript,php,json,Javascript,Php,Json,我有这个JavaScript获取函数 async getAllExpensesByUser() { let reponse = await fetch("router.php/getAll"); console.log(reponse.json()); } 也试过 getAllExpensesByUser = async () => { const response = await fetch("router.php/getAll

我有这个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{}
,我需要的结果是
[[PromiseResult]]

,正如Yousaf指出的,fetch和Body.json()都返回promises。要在继续之前等待fetch和Body.json调用的解析,只需如下更新代码:

async getAllExpensesByUser() {
  let reponse = await fetch("router.php/getAll");
  let object = await response.json();
  console.log(object);
  return object;//If needed, see the comment by Emiel
}

正如Yousaf所指出的,fetch和Body.json()都返回承诺。要在继续之前等待fetch和Body.json调用的解析,只需如下更新代码:

async getAllExpensesByUser() {
  let reponse = await fetch("router.php/getAll");
  let object = await response.json();
  console.log(object);
  return object;//If needed, see the comment by Emiel
}
response.json()。您可以在

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

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

...

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

...
response.json()。您可以在

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

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

...

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

...

它返回一个承诺,因为它是这样定义的:另请注意,您不需要用
promise.resolve
包装
jsonValue
:一个
async
函数返回一个承诺-从异步函数返回的任何非承诺值都隐式包装在一个承诺中。在MDN示例中,数据在fetch内呈现它本身如果我想返回数据并在其他地方使用它怎么办?我尝试过这样做,但是当我在我想要使用它的地方使用console.log(data)
时,它又变成了一个承诺。在您尝试实现
getAllExpensesByUser
函数的地方添加代码。
getAllExpensesByUser
函数是异步的,这意味着它返回一个承诺。要获得实现该承诺的价值,您可以选择chain
then()
method或
wait
调用
getAllExpensesByser
函数它返回一个承诺,因为它被定义为这样做:另请注意,您不需要使用
promise.resolve来包装
jsonValue
:一个
异步
函数返回一个承诺-从异步函数返回的任何非承诺值隐式包装在承诺中。在MDN示例中,数据在fetch自身内部呈现。如果我想返回数据并在其他地方使用它怎么办?我尝试过这样做,但是当我在我想要使用它的地方使用console.log(data)
时,它又变成了一个承诺。在您尝试实现
getAllExpensesByUser
函数的地方添加代码。
getAllExpensesByUser
函数是异步的,这意味着它返回一个承诺。要获得实现该承诺的值,可以链接
then()
方法或
wait
调用
getAllExpensesByUser
函数这很有用。非常感谢。别忘了返回
对象
@EmielZuurbier,谢谢你指出这一点。这很有用。非常感谢。别忘了返回
对象
@EmielZuurbier,谢谢你指出这一点。