function timeOut(){ return new Promise((resolve)=>{ setTimeout(()=>{ console.log("222") resolve() },1000) }) } async function test(){ console.log("111") await timeOut() console.log("333") } function test2(){ console.log("0000") test() console.log("4444") } test2()为什么先执行new Promise而不是console.log(4)
时间: 2024-04-15 10:29:01 浏览: 153
在给定的代码中,`test2()` 函数是一个普通函数,它调用了 `test()` 函数。在 `test()` 函数内部,在执行 `await timeOut()` 语句时,会等待 `timeOut()` 函数返回的 Promise 对象的状态变为已完成(即调用了 `resolve()`)。
当 `test()` 函数被调用时,它会先输出 `111`,然后执行 `await timeOut()`,这里的 `await` 关键字会暂停 `test()` 函数的执行,等待 `timeOut()` 函数的 Promise 对象状态变为已完成。而在 `await` 的过程中,`test2()` 函数并没有等待,它会立即继续执行下一行代码,即输出 `4444`。
因此,执行顺序是这样的:
1. 调用 `test2()` 函数。
2. 输出结果为 `0000`,表示第一个 `console.log` 语句打印的内容。
3. 调用 `test()` 函数。
4. 输出结果为 `111`,表示第二个 `console.log` 语句打印的内容。
5. 在 `test()` 函数中,执行 `await timeOut()` 语句,暂停 `test()` 函数的执行。
6. 回到 `test2()` 函数,继续执行下一行代码。
7. 输出结果为 `4444`,表示第三个 `console.log` 语句打印的内容。
8. 经过 1 秒后,`setTimeout` 回调函数中的 `console.log` 语句会打印出 `222`。
9. `timeOut()` 函数中的 Promise 对象状态变为已完成。
10. `await` 表达式等待结束,继续执行 `test()` 函数的剩余部分。
11. 输出结果为 `333`,表示第四个 `console.log` 语句打印的内容。
因此,整个代码的输出结果是:
```
0000
111
4444
222
333
```
阅读全文