gpt4 book ai didi

javascript - 了解 ECMAScript 中的 async/await 提案

转载 作者:行者123 更新时间:2023-11-27 22:37:50 24 4
gpt4 key购买 nike

正如async所说,pormise对象或简单数据(如数字或字符串)可以跟在await后面,当它是简单数据时,它就像sync一样,我写了以下第一个程序:

let fs = require('fs');

async function readF(){
let data1 = await fs.readFileSync('./file1.txt','utf-8');
console.log(data1);
let data2 = fs.readFileSync('./file2.txt','utf-8');
console.log(data2);
}
readF();
console.log('outter hello');

结果是:

outter hello
first file
second file

看来readF函数是异步的?为什么?

我编写了第二个程序,只需将等待更改为第二个文件读取器:

let fs = require('fs');

async function readF(){
let data1 = fs.readFileSync('./file1.txt','utf-8');
console.log(data1);
let data2 = await fs.readFileSync('./file2.txt','utf-8');
console.log(data2);
}
readF();
console.log('outter hello');

这次的结果是:

first file
outter hello
second file

我无法理解这个奇怪的惊人结果,我希望你能帮助我。

最佳答案

JavaScript 是单线程的,这意味着它在任何时候只能执行一件事。当所有同步代码完成时,异步代码就会执行。

async 的语法和await是标记为 await 的操作只能出现在标记为 async 的函数内,它标记了同步代码完成时继续执行的代码点。

在尚不具备这些功能的 JavaScript 版本中,您可以使用 setTimeout 来模拟它。延迟为0setTimeout异步执行回调函数。如果将所有语句放在 await 之后里面 setTimeout block ,您可以看到行为是相同的:

function async(){
setTimeout(function() {
console.log("first file");
console.log("second file");
}, 0);
}

async();
console.log('outer hello');

function async(){
console.log("first file");
setTimeout(function() {
console.log("second file");
}, 0);
}

async();
console.log('outer hello');

关于javascript - 了解 ECMAScript 中的 async/await 提案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com