我有这个 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]]
答案 0 :(得分:1)
正如 Yousaf 所指出的,fetch 和 Body.json() 都返回 promise。要在继续之前等待 fetch 和 Body.json 调用解析,您只需像这样更新代码:
//Encode the data
postBody, _ := json.Marshal(map[string]string{
"name": "Test",
"email": "Test@Test.com",
})
responseBody := bytes.NewBuffer(postBody)
//Leverage Go's HTTP Post function to make request
resp, err := http.Post("https://postman-echo.com/post", "application/json", responseBody)
//Handle Error
if err != nil {
log.Fatalf("An Error Occured %v", err)
}
defer resp.Body.Close()
//Read the response body
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(err)
}
sb := string(body)
log.Printf(sb)
答案 1 :(得分:1)
response.json()
返回一个 Promise,因为这个方法需要一个 Response stream 并读取它直到完成,这是一个异步过程。您可以在 specification
您只需要等待读取流的过程结束,为此您也可以使用 await
async getAllExpensesByUser() {
let reponse = await fetch("router.php/getAll");
let object = await response.json();
return object
}
...
const userExpenses = await getAllExpensesByUser()
console.log(userExpenses)
...