Javascript 控制台中的代码最后没有出现的问题

Javascript 控制台中的代码最后没有出现的问题,javascript,promise,Javascript,Promise,有没有人能告诉我该怎么做。最后一条消息:“承诺的结束”出现在代码的末尾而不是开头 const posts=[ {标题:“第一篇文章”,正文:“这是第一篇文章”}, {标题:“第二站”,正文:“这是第二站”}, ]; 函数getPosts(){ 设置超时(()=>{ posts.forEach((post)=>{ 控制台日志(post.title、post.body); }); }, 1000); } 函数createPostPromise(post){ 返回新承诺((解决、拒绝)=>{ 常量错

有没有人能告诉我该怎么做。最后一条消息:“承诺的结束”出现在代码的末尾而不是开头

const posts=[
{标题:“第一篇文章”,正文:“这是第一篇文章”},
{标题:“第二站”,正文:“这是第二站”},
];
函数getPosts(){
设置超时(()=>{
posts.forEach((post)=>{
控制台日志(post.title、post.body);
});
}, 1000);
}
函数createPostPromise(post){
返回新承诺((解决、拒绝)=>{
常量错误=错误;
如果(!错误){
设置超时(()=>{
posts.push(post);
决心(正确);
});
}否则{
拒绝(“错误:出了问题”);
}
}, 2000);
}
createPostPromise({标题:“Post Three”,正文:“This is Post Three”})
。然后(获取帖子)
.catch((err)=>console.log(err))
.最后(()=>{
控制台日志(“承诺终止”);

});代码完全按照您的指示执行:
getPosts
设置一个回调以在一秒钟内记录日志,然后立即返回。您的意思可能是
getPosts
是一个异步函数(=一个返回承诺的函数),在记录日志后解析:

const posts=[{
标题:“发布一条”,
正文:“这是第一篇文章”
},
{
标题:“第二篇”,
正文:“这是第二站”
},
];
函数getPosts(){
返回新承诺((解决)=>{
设置超时(()=>{
posts.forEach((post)=>{
控制台日志(post.title、post.body);
});
解决();
}, 1000);
})
}
函数createPostPromise(post){
返回新承诺((解决、拒绝)=>{
常量错误=错误;
如果(!错误){
设置超时(()=>{
posts.push(post);
决心(正确);
});
}否则{
拒绝(“错误:出了问题”);
}
}, 2000);
}
创建后Promise({
标题:"三后",,
正文:“这是第三站”
})
。然后(获取帖子)
.catch((err)=>console.log(err))
.最后(()=>{
控制台日志(“承诺终止”);

});
getPosts
不返回承诺,因此您的代码与
getPosts()几乎相同;控制台日志(“承诺终止”)因为没有定义如何等待
getPosts
完成。它只是启动一个计时器,并立即完成,如果愿意,您的
getPosts
将通过
.then()
运行。这是在所有承诺都得到解决之后发生的
getPosts
有一个
setTimeout
,因此计划在将来运行。因此,使用
.then()
“done”,它将转到
.finally()
。最终,在将来运行来自
getPosts
setTimeout
setTimeout
是异步的。谢谢-我已经转换了getPosts,因此它返回了一个承诺,现在它工作了:)@RocketHazmat correction,
getPosts
在第一个承诺得到解决后运行。它只是对将来触发的计时器进行排队。但是函数确实在所有承诺解决之前和
回调执行之前运行。最后
回调执行。这正是我在阅读前几个注释之后所做的。非常感谢您确认我的解决方案是正确的。