了解 ECMAScript 中的 async/await 个提议
Understand async/await proposal in ECMAScript
正如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函数是异步的?为什么?
然后我写第二个程序,把await改成第二个文件就可以了reader:
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
延迟 0
来模拟它。 setTimeout
异步执行回调函数。如果将 await
之后的所有语句放在 setTimeout
块中,您可以看到行为是相同的:
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');
正如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函数是异步的?为什么?
然后我写第二个程序,把await改成第二个文件就可以了reader:
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
延迟 0
来模拟它。 setTimeout
异步执行回调函数。如果将 await
之后的所有语句放在 setTimeout
块中,您可以看到行为是相同的:
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');