我正在try 在javascript中创建一个星形按钮,当你点击它时,它会附加到重要项目的列表中.但当我点击按钮时,如你所见,在我要求将‘重要’更改为真后,我要求打印它是假还是真,但它继续打印假,即使我已将其更改为真.我做错了什么? 如果有任何帮助我将不胜感激

 const second_element = document.createElement('div')


 second_element.innerHTML = `<div style="display: inline-block; width: 5%;"> <button style="background-color: ${read}"> <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-star" viewBox="0 0 16 16">
    <path d="M2.866 14.85c-.078.444.36.791.746.593l4.39-2.256 4.389 2.256c.386.198.824-.149.746-.592l-.83-4.73 3.522-3.356c.33-.314.16-.888-.282-.95l-4.898-.696L8.465.792a.513.513 0 0 0-.927 0L5.354 5.12l-4.898.696c-.441.062-.612.636-.283.95l3.523 3.356-.83 4.73zm4.905-2.767-3.686 1.894.694-3.957a.565.565 0 0 0-.163-.505L1.71 6.745l4.052-.576a.525.525 0 0 0 .393-.288L8 2.223l1.847 3.658a.525.525 0 0 0 .393.288l4.052.575-2.906 2.77a.565.565 0 0 0-.163.506l.694 3.957-3.686-1.894a.503.503 0 0 0-.461 0z"/>
    </svg> </button> </div>`;

second_element.addEventListener('click', function() {
    console.log("clicked")
    fetch(`/emails/${email.id}`, {
      method: 'PUT',
      body: JSON.stringify({
          important: true
      })
    })
    .then( () => { 
      console.log(email.important)
      load_mailbox('inbox')
    })
  })

document.querySelector('#container').append(second_element);

推荐答案

看起来您是在通过FETCH调用更新email.Important之前打印它的值.FETCH函数是异步的,因此需要一些时间才能完成.同时,代码的其余部分继续执行.您需要等待FETCH调用完成并接收到响应,然后才能打印更新后的email.reportal值.

为此,您可以将另一个Then块链接到Fetch调用,以处理来自服务器的响应.在此块中,您可以访问更新的邮箱对象并打印其重要属性.以下是应该可以工作的代码的更新版本:

second_element.addEventListener('click', function() {
  console.log("clicked")
  fetch(`/emails/${email.id}`, {
    method: 'PUT',
    body: JSON.stringify({
      important: true
    })
  })
  .then(response => response.json()) // parse response as JSON
  .then(email => {
    console.log(email.important)
    load_mailbox('inbox')
  })
  .catch(error => {
    console.error('Error:', error);
  });
});

在这个更新的版本中,第一个Then块将来自服务器的响应解析为JSON,这样您就可以访问更新的邮箱对象.然后,第二个Then块记录email.Important的值.如果FETCH调用出现错误,则CATCH块将错误消息记录到控制台.

Javascript相关问答推荐

为什么我无法使用useMemo()停止脚本渲染?

单击按钮后未清除 Select

将json数组项转换为js中的扁平

如何最好地从TypScript中的enum获取值

GrapeJS -如何保存和加载自定义页面

Promise Chain中的第二个useState不更新

使用JQuery单击元素从新弹出窗口获取值

使用原型判断对象是否为类的实例

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

为什么123[';toString';].long返回1?

本地库中的chartjs-4.4.2和chartjs-plugin-注解

用于在路径之间移动图像的查询

环境值在.js文件/Next.js中不起作用

同一类的所有div';S的模式窗口

OpenAI转录API错误请求

TypeError:无法读取未定义的属性(正在读取';宽度';)

如何使用基于promise (非事件emits 器)的方法来传输数据?

当从其他文件创建类实例时,为什么工作线程不工作?

Phaser3 preFX addGlow不支持zoom

如何找到带有特定文本和测试ID的div?