作者: 3ldk 時間: 2019-10-5 09:20 標題: 何解fetch api係第一層拎唔到data
本帖最後由 3ldk 於 2019-10-8 00:29 編輯
以依兩段code為例, 佢地做既野係完全一樣的
但實際上只有第二段code先係正常, 第一段code只能print出一個Promise
為何本應無分別既野實際卻不一樣?
- fetch('/user/data-source', {method: 'get'})
- .then(function(response) {
- if (response.status === 200 || response.status === 0) {
- console.log(response.json())
- } else {
- return Promise.reject(new Error(response.statusText))
- }
- })
- .catch(function(err) {
- console.log(err)
- })
- fetch('/user/data-source', {method: 'get'})
- .then(function(response) {
- if (response.status === 200 || response.status === 0) {
- return response.json()
- } else {
- return Promise.reject(new Error(response.statusText))
- }
- })
- .then(function(j) {
- console.log(j)
- })
- .catch(function(err) {
- console.log(err)
- })
作者: vichui 時間: 2019-10-5 11:13
因為 response.json() 個return 係一個promise 來...
而第二段code都係有問題的
return response.json()
下一個係
.then(function(json) {
console.log(json)
}
回覆 1# 3ldk
作者: 3ldk 時間: 2019-10-5 18:01
因為 response.json() 個return 係一個promise 來...
而第二段code都係有問題的
return response.json()
...
vichui 發表於 2019-10-5 11:13
唔明第二段code有乜問題? 測試過無問題
作者: 3kiu 時間: 2019-10-5 18:25
因為 response.json() 個return 係一個promise
https://developer.mozilla.org/en-US/docs/Web/API/Body/json
你想同code2一樣就要
- fetch('/user/data-source', {
- method: 'get'
- })
- .then(function(response) {
- if (response.status === 200 || response.status === 0) {
- response.json().then(json => {
- console.log(json)
- });
- return Promise.resolve()
- } else {
- return Promise.reject(new Error(response.statusText))
- }
- })
- .catch(function(err) {
- console.log(err)
- })

