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)
        }