Javascript 我有两段代码,一段使用.then().catch,另一段使用async/await。两个代码片段做的事情完全一样吗?
我试图弄清楚我是喜欢Javascript 我有两段代码,一段使用.then().catch,另一段使用async/await。两个代码片段做的事情完全一样吗?,javascript,Javascript,我试图弄清楚我是喜欢.then().catch还是asyc/await,所以我一直在重写一些代码,看看我更喜欢哪种方式。问题是,我不确定使用.then().catch和asyc/await时代码的行为是否完全相同。例如,下面是两段代码: axios.post('/createRoom', room) .then((response) => { this.createRoomWindow = false this
.then().catch
还是asyc/await
,所以我一直在重写一些代码,看看我更喜欢哪种方式。问题是,我不确定使用.then().catch
和asyc/await
时代码的行为是否完全相同。例如,下面是两段代码:
axios.post('/createRoom', room)
.then((response) => {
this.createRoomWindow = false
this.servers[this.selectedServer].rooms.push(response.data.room)
})
.catch((error) => {
console.log(error);
});
及
我很好奇这两段代码是否做了完全相同的事情,或者是否有我自己看不到的差异。例如,我的理解是,在第一个代码段中,this.createRoomWindow=false
只会在我收到响应后发生,即使它与响应无关,也不需要响应
我不确定this.createRoomWindow=false
是否会在第二个代码段中完成POST请求之前或之后执行。我知道this.servers[this.selectedServer].rooms.push(response.data.room)
肯定会在POST请求之后执行,因为它使用了部分响应。考虑到this.createRoomWindow=false
不必等待POST请求完成,我假设JavaScript会在POST完成之前执行它
我说得对吗?如果我是正确的,那么当使用
async/await
?时,如何确保一段代码仅在POST请求完成后执行。wait可以与Promise一起使用(这是您的第一个代码片段返回的内容)。来自MDN:
wait操作符用于等待承诺。它只能在异步函数中使用
最重要的是:
如果wait运算符后面的表达式的值不是承诺,则它将转换为已解析的承诺
而:
承诺是在创建承诺时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这使得异步方法可以像同步方法一样返回值:异步方法不会立即返回最终值,而是返回在将来某个时候提供值的承诺
所以要小心,因为它们绝对不一样。请仔细阅读提供的文档。它们的执行方式相同。异步事件机制略有不同,但执行顺序相同。使用async/await时,异步函数中的所有内容都会等待等待完成。所以不管怎样,都要等到邮递结束后。它无法区分哪些行依赖于等待的值,哪些行不依赖于等待的值
try {
let response = await axios.post('/createRoom', room)
this.createRoomWindow = false
this.servers[this.selectedServer].rooms.push(response.data.room)
} catch (error) {
console.log(error)
}