开发者问题收集

我收到错误“无法读取未定义的属性‘then’”

2020-11-20
4641

我收到此错误:

TypeError: Cannot read property 'then' of undefined in controller

[控制器]

fetchGameData() {
  DataModel.getList().then(data => {
    console.log(data);
  })
}

[DataModel]

export default {
    getList() {
        fetch('URL')
        .then((res) => {
            return Promise.resolve(res.json());
        })
        .catch((err) => {
            console.log("Fetch Error!!!", err);
        })
    }
}
3个回答

实际上,错误已经很明显了。您的函数 getList() 不会返回任何在 JavaScript 中 undefined 的内容。您应该在函数末尾返回“something”。如果您想在函数的返回值上使用 .then ,您可能希望返回一个 “Promise”

fetch 函数无论如何都会返回一个 Promise 。所以可以简单地返回它。您可以在 此处 https://javascript.info/fetch

因此,更简洁的替代方案是

export default {
    getList() {
        return fetch('URL')
        .then((res) => {
            return Promise.resolve(res.json());
        })
        .catch((err) => {
            console.log("Fetch Error!!!", err);
        })
    }
}
canbax
2020-11-20

您需要返回一个 promise 来执行 .then

export default {
  getList() {
    return new Promise((resolve, reject) => {
        fetch("URL")
        .then((res) => {
          resolve(res.json());
        })
        .catch((err) => {
          console.log("Fetch Error!!!", err);
        });
    });
  },
};

Aditya Menon
2020-11-20

[服务]

async function getList() {
      const result = await fetch('URL')
        .then((res) => {
            return Promise.resolve(res.json());
        })
        .catch((err) => {
            console.log("Fetch Error!!!", err);
        })
      return result.json();
}

[控制器]

fetchGameData() {
  DataModel.getList().then(data => {
    console.log(data);
  })
}
Khanh Le Tran
2020-11-20