属性 .然后未定义的错误



我在下面的checkB函数中不断收到一个.then未定义的错误。

export function checkB(accountId) {
    return new Promise((resolve, reject) => {
      const myRepo = new myRepo();
      myRepo.checkC(accountId).then( results => {
        return resolve(results));
      });
    });
}

我可以调用 checkC 并返回 json 响应。

checkC(){
  const fetchApi = new FetchApi();
  const url = `${config.routes.base}/mypath/5`;
  fetchApi.get(url).then(results => {
    return results.json().then(json => {
      return json;
    });
  }).catch(err => {
    console.log(err);
  });
}

我有一个调用 CheckB 的初始功能 checkA() - 我试图同步获取 CheckA 中的结果,但不断遇到来自 CheckB 的 .then 未定义错误。

谁能解释一下我在这里做错了什么。

你需要

checkC()返回一个承诺:

checkC(){
  const fetchApi = new FetchApi();
  const url = `${config.routes.base}/mypath/5`;
  return fetchApi.get(url)
    .then(results => results.json());
    .catch(console.log);
}

此外,由于results.json()是返回结果的承诺,因此您无需执行.then(json => {return json;});操作。

而且,更一般地说,如果您需要对一个承诺的结果做某事,而该结果本身就是另一个承诺的结果,则可以在不需要嵌套代码的情况下链接它们。

你可以像这样写第二个示例(没用,我写的第一个代码工作正常,只是为了一个例子):

const fetchApi = new FetchApi();
const url = `${config.routes.base}/mypath/5`;
fetchApi.get(url).then(results => {
  return results.json();
})
.then(json => {
  return json;
}).catch(err => {
  console.log(err);
});

最新更新