Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Fetch API时无法读取未定义错误的属性_Javascript_Fetch Api - Fatal编程技术网

Javascript 使用Fetch API时无法读取未定义错误的属性

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)

我正在使用fetchapi编写javascript来测试输出。但是当我尝试测试代码时,我得到以下错误:无法读取未定义的属性“then”

承诺需要从函数返回。这是我第一次致力于承诺。有人能指导我如何从我的以下代码中返回正确的承诺吗

我有一个如下的javascript方法

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
请参阅以下代码:

函数getBooks(){ 取回(“https://jsonplaceholder.typicode.com/posts") 。然后(响应=>{ 如果(response.status==200){ 返回response.json(); }否则{ 返回承诺。拒绝(新错误(“未能获得响应”); } }) 。然后(bookResponse=>{ const bookListUL=document.getElementById('BookList'); bookResponse.forEach(book=>{ const el=document.createElement(“li”); el.innerHTML=book.title; 附属儿童图书目录(el); }); }) .catch(err=>console.error(err)); } getBooks()
    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()
            });
        }
    )