我在下面的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);
});