JavaScript:使用await使异步代码看起来更像同步代码

10 浏览
0 Comments

JavaScript:使用await使异步代码看起来更像同步代码

我正在尝试理解异步等待功能。

因此,我想使用一个异步函数,解析它,然后按顺序进行以下日志记录。

我应该如何实现这一点?或者我对某些基本概念有误解吗?

代码:

const test = async function() {
    console.log('hi 1');
    await setTimeout(() => {
        console.log('timout1')
    }, 1000);
    console.log('hi 2');
    console.log('hi 3');
}
test()

结果:

hi 1
hi 2
hi 3
timout1

预期结果:

hi 1
timout1
hi 2
hi 3

0
0 Comments

使用await可以使异步代码看起来更像同步代码。在上面的例子中,我们定义了一个函数resolveAfter2Seconds(),它返回一个Promise对象,该对象在2秒后被解析为'resolved'。然后,我们定义了一个async函数asyncCall(),在该函数中,我们使用了await关键字来暂停代码的执行,直到Promise对象的状态变为已解决。在await之后,我们可以像使用同步代码一样使用result变量。在asyncCall()函数中,我们先打印出'hi 1',然后等待resolveAfter2Seconds()函数返回的Promise对象被解析,然后打印出结果'resolved',接着打印出'hi 2'和'hi 3'。

使用await能够避免回调地狱,使代码更易读、更易维护。它使异步代码看起来更像同步代码,提高了代码的可读性和可理解性。通过使用await关键字,我们可以在异步操作完成之后再继续执行后续的代码,而不需要使用回调函数或者Promise链。

,使用await可以使异步代码看起来更像同步代码,提高代码的可读性和可维护性。

希望这篇文章能帮助你理解async await。

0
0 Comments

使用await可以使异步代码看起来更像同步代码。然而,使用await只能用于Promise对象,而setTimeout函数并不返回一个Promise对象。但是,可以使用setTimeout来解析一个Promise对象,从而达到期望的结果。

因此,函数的执行将会在await等待的Promise对象被解析或被拒绝之前暂停,并在解析或拒绝后继续执行。

以下是一个示例代码:

const test = async function() {
  console.log('hi 1');
         // return a new promise resolved after setTimeout callback is fired
  await (new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('timout1')
      resolve()
    }, 1000)
  }))
  console.log('hi 2');
  console.log('hi 3');
}
test()

希望这对你有所帮助!

哦!你是对的!只是因为setTimeout是异步的,并不意味着它是一个Promise对象!

0