Javascript 使用Fetch API时无法读取未定义错误的属性
我正在使用fetchapi编写javascript来测试输出。但是当我尝试测试代码时,我得到以下错误:无法读取未定义的属性“then” 承诺需要从函数返回。这是我第一次致力于承诺。有人能指导我如何从我的以下代码中返回正确的承诺吗 我有一个如下的javascript方法Javascript 使用Fetch API时无法读取未定义错误的属性,javascript,fetch-api,Javascript,Fetch Api,我正在使用fetchapi编写javascript来测试输出。但是当我尝试测试代码时,我得到以下错误:无法读取未定义的属性“then” 承诺需要从函数返回。这是我第一次致力于承诺。有人能指导我如何从我的以下代码中返回正确的承诺吗 我有一个如下的javascript方法 function getBooks() { fetch("http://localhost:3000/books").then(response = > { if (response.status == 200)
function getBooks() {
fetch("http://localhost:3000/books").then(response = > {
if (response.status == 200) {
return Promise.resolve(response.json());
} else {
return Promise.reject(new error("Failed to get resonse"));
}
}).then(bookResponse = > {
const bookListUL = document.getElemtnById('BookList');
let bookInnerHTML = ' ';
bookResponse.forEach(book => {
bookInnerHTML += '<li>...</li>'
});
return bookListUL.innerHTML = bookInnerHTML ;
});
}
您的代码中有几个错误:
返回一个response.json()
,您不需要返回解析为承诺的承诺,只需返回承诺即可承诺
之间应该没有空格,应该是=>
=>
- 您拼错了
BookResponse
response.json()
返回承诺,您不需要返回返回承诺.resolve(response.json())
只需执行返回响应.json()
。另外,=>
之间应该没有空格。另外bookResponse
应该是bookResponse
@zero298和Eric这些都是打字错误,我更正了它并更新了我的问题,谢谢。这个错误到底发生在哪里?在测试中还是在实际代码中?
it('api should return correct response', (done) => {
fetchMock.get('http://localhost:3000/books', bookTestData); //bookTestData is a json object with book details
script.getBooks().then(res => {
expect(fetchmock.lastUrl()).to.equal('http://localhost:3000/books');
expect(res).to.deep.equal(bookTestData);
done();
})
.catch(err => {
expect(err).to.equal(null, err);
done()
});
}
)