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

JavaScript Promises - Cannot read property 'then' of undefined

本文关键字:未定义 那么 属性 承诺 读取 JavaScript      更新时间:2023-09-26

getId导致错误无法读取未定义的属性'then'。它在等待解决fetchIDs承诺之前返回Promise.resolve(r)(GET请求完成)。

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()不会返回任何内容。你可以把它改成这样:

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();
  }
};

这将返回来自fetchIDs()的promise,然后getId()的调用者可以使用该promise。