首页 > 解决方案 > 无法使用 fetch 解决承诺

问题描述

我无法使用 fetch 解决这个承诺 我想要 2 个值去 .then(data) 我想将状态用作墙作为我从后端获得的 JSON,然后继承传入状态但 resp.json 是总是显示 a 而我无法访问它的价值任何想法?

fetch('/signup', {
      credentials: "same-origin",
      mode: "same-origin",
      method: 'POST',
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(inputJSON)
    })

      .then(resp => {
        return [resp.json(), resp.status]
    })
      .then(function (data) {
      
        console.log(data);
        let Status = data[1]
        
        let jsonData = data[0]
        let p = jsonData.then(e => { return e })
        console.log(p);

      })
  }
})

标签: javascript

解决方案


返回 aPromise.all以将两个值沿链传递:

fetch('/signup', {
    credentials: "same-origin",
    mode: "same-origin",
    method: 'POST',
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(inputJSON)
})

    .then(resp => {
        return Promise.all([resp.json(), resp.status]);
    })

或者,更好的是,使用async/ await,控制流会更清晰:

const resp = await fetch('/signup', {
    credentials: "same-origin",
    mode: "same-origin",
    method: 'POST',
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(inputJSON)
});
const result = await resp.json();
// do stuff with result and with resp.status

确保在这两种情况下都捕获可能的错误。


推荐阅读