Javascript 异步等待似乎对我的函数没有影响

Javascript 异步等待似乎对我的函数没有影响,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我正在尝试将新数据推送到我的posts数组中,并通过DOM操作将其显示在客户机上。前两个元素按预期显示,但第三个元素在我使用async/await关键字时未显示 const posts = [ { title: 'Post One', body: 'This is post one' }, { title: 'Post Two', body: 'This is post two' } ]; const getPosts = () => {

我正在尝试将新数据推送到我的posts数组中,并通过DOM操作将其显示在客户机上。前两个元素按预期显示,但第三个元素在我使用async/await关键字时未显示

const posts = [
  {
    title: 'Post One',
    body: 'This is post one'
  },
  {
    title: 'Post Two',
    body: 'This is post two'
  }
];

const getPosts = () => {
  setTimeout(() => {
    let output = "";
    posts.forEach((post, index) => {
      output += 
        `<ul>
          <li>${post.title}</li>
        </ul>`
    })

    document.getElementById('heading').innerHTML = output;

  }, 1000);
}

const createPosts = (newPost) => {
  setTimeout(() => {
    posts.push(newPost);
  }, 2000)

}

const newPost = async () => {
  try{
    await createPosts({title: 'Post Three', body: 'This is post three'});
    getPosts();
  }
  catch{err =>  console.log(err)}
}


newPost();
const posts=[
{
标题:"第一篇文章",,
正文:“这是第一篇文章”
},
{
标题:"第二帖",,
正文:“这是第二帖”
}
];
const getPosts=()=>{
设置超时(()=>{
让输出=”;
posts.forEach((post,index)=>{
输出+=
`
  • ${post.title}
` }) document.getElementById('heading')。innerHTML=输出; }, 1000); } const createPosts=(newPost)=>{ 设置超时(()=>{ posts.push(newPost); }, 2000) } const newPost=async()=>{ 试一试{ 等待createPosts({title:'Post Three',body:'This is Post Three'}); getPosts(); } catch{err=>console.log(err)} } newPost();
createPosts()
需要返回超时后解决的
承诺,以便等待

const createPosts = newPost =>
  new Promise(resolve => setTimeout(() => {
    posts.push(newPost);
    resolve();
  }), 2000));

createPosts()
没有返回承诺,您不能等待它。为什么
createPosts()
使用
setTimeout()
?在3秒后推送数组中的数据,然后启动DOM操作。因此它需要返回一个承诺,该承诺在timeout函数中得到解决。请删除createPosts()中的setTimeout,并使post变量不恒定,谢谢Barmar。事实上,createPosts必须兑现工作承诺。我发现了问题。非常感谢你。