JavaScript 承诺 - 无法读取未定义的 属性 'then'

JavaScript Promises - Cannot read property 'then' of undefined

getId 导致错误 Cannot read 属性 'then' of undefined。它在等待 fetchIDs 承诺得到解决(GET 请求已完成)之前返回 Promise.resolve(r)

function fetchIDs () {
  return new Promise (function (resolve, reject){
    // GET request
  });
};

function getId () {
  if (typeof localStorage.id !== 'undefined' ) {
    return Promise.resolve(localStorage.id);
  }
  else {
    fetchIDs().then(function (r) {
      return Promise.resolve(r);
    });
  }
};

getId().then(function (r) {
    localStorage.id = r;
    doSthElse();
});

知道我在这里遗漏了什么或做错了什么吗?谢谢。

如果您最终调用 fetchIDs()

getId() 不会 return 任何事情。你可以改成这样:

function getId () {
  if (typeof localStorage.id !== 'undefined' ) {
    return Promise.resolve(localStorage.id);
  }
  else {
    return fetchIDs().then(function (r) {
      return Promise.resolve(r);
    });
  }
};

但是,您实际上并不需要额外的 Promise.resolve(r),只需这样做即可:

function getId () {
  if (typeof localStorage.id !== 'undefined' ) {
    return Promise.resolve(localStorage.id);
  }
  else {
    return fetchIDs();
  }
};

这将 return 来自 fetchIDs() 的承诺,getId() 的调用者随后可以使用它。