javascript - async异步编程的问题
PHP中文网
PHP中文网 2017-04-11 12:10:31
[JavaScript讨论组]

我看到async的描述是,await后可以跟promise对象和原始数据,当跟的是原始数据的时候相当于同步操作,我写的第一个实例程序:

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('外部的hello');

发现输出结果是

外部的hello
这是第一个文件
这是第二个文件

readFileSync返回的是原始数据,那么应该同步执行才对,为何外部的hello会先打印?

然后我又稍微改了一下,这次文件一不加await,文件二加await

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('外部的hello');

这次输出结果却是:

这是第一个文件
外部的hello
这是第二个文件

怎么会出现这种情况呢?求解,谢谢

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
PHP中文网

因为你readFasync的,所以当调用readF的时候,遇到await就挂起在另外一个线程跑了,这个时候外面的继续执行,再是你await的结果收到后,再继续。

PHP中文网

@无题 说的基本意思是正确的,你的函数本身是异步函数,当然会直接往下执行。但是并不存在另一个线程,js中并没与多线程。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号