何解fetch api係第一層拎唔到data

本帖最後由 3ldk 於 2019-10-8 00:29 編輯

以依兩段code為例, 佢地做既野係完全一樣的
但實際上只有第二段code先係正常, 第一段code只能print出一個Promise

為何本應無分別既野實際卻不一樣?
  1. fetch('/user/data-source', {method: 'get'})
  2. .then(function(response) {
  3.     if (response.status === 200 || response.status === 0) {
  4.         console.log(response.json())
  5.     } else {
  6.         return Promise.reject(new Error(response.statusText))
  7.     }
  8. })
  9. .catch(function(err) {
  10.     console.log(err)
  11. })
複製代碼
  1. fetch('/user/data-source', {method: 'get'})
  2. .then(function(response) {
  3.     if (response.status === 200 || response.status === 0) {
  4.         return response.json()
  5.     } else {
  6.         return Promise.reject(new Error(response.statusText))
  7.     }
  8. })
  9. .then(function(j) {
  10.         console.log(j)
  11. })
  12. .catch(function(err) {
  13.     console.log(err)
  14. })
複製代碼

因為 response.json() 個return 係一個promise 來...

而第二段code都係有問題的
return response.json()
下一個係
.then(function(json) {
        console.log(json)
}
回覆 1# 3ldk

TOP

因為 response.json() 個return 係一個promise 來...

而第二段code都係有問題的
return response.json()
...
vichui 發表於 2019-10-5 11:13



唔明第二段code有乜問題? 測試過無問題

TOP

因為 response.json() 個return 係一個promise
https://developer.mozilla.org/en-US/docs/Web/API/Body/json

你想同code2一樣就要
  1. fetch('/user/data-source', {
  2.         method: 'get'
  3.     })
  4.     .then(function(response) {
  5.         if (response.status === 200 || response.status === 0) {
  6.             response.json().then(json => {
  7.                 console.log(json)
  8.             });
  9.            return Promise.resolve()
  10.         } else {
  11.             return Promise.reject(new Error(response.statusText))
  12.         }
  13.     })
  14.     .catch(function(err) {
  15.         console.log(err)
  16.     })
複製代碼

TOP