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

时间:2015-04-04 22:48:16

标签: javascript xmlhttprequest promise

getId导致错误无法读取属性'然后'未定义。在等待Promise.resolve(r)承诺得到解决之前返回fetchIDs(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();
});

知道我在这里错过了什么或做错了什么?感谢。

1 个答案:

答案 0 :(得分:1)

如果您最终致电getId(),则

fetchIDs()不会返回任何内容。您可以将其更改为:

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()的承诺,getId()的来电者随后可以使用该承诺。