新人对“promise让写写异步代码就跟写同步代码一样”的疑问
发布于 8 年前 作者 cheeseKun 5275 次预览 最后一次回复是 8 年前 来自 问答
const readFile = function (fileName) {
return new Promise(function (resolve, reject) {
fs.readFile(fileName, 'utf8', function (error, data) {
if (error) return reject('出错啦' + error);
resolve(data);
});
});
};
(async function() {
let data = await readFile(./data.json)
console.log(data)
})()
await既然会等待获取完数据后,再进行console
那就不跟同步一样了么,
如果万一文件读取时间很长,
那不是会堵塞进程么,那所谓的node的异步,非堵塞体现在哪
这跟直接用readFileSync()读取数据有什么区别
promise让写写异步代码就跟写同步代码一样 这句话理解不能 困扰了很久,我觉得是我误解了,但是看很多资料感觉也没能理解 第一次在社区提问,求解答
8 回复
我想上面的代码把你的问题解释清楚了……阻塞不阻塞要看你怎么写,并不强制一定要 await。await 阻塞的是 async 函数,不是整个 Node。
先去去读读《深入浅出node.js》,了解一下node非阻塞异步是怎么一回事
@cheeseKun 看看我的文章,好好理解 js 中的异步: http://www.cnblogs.com/htoooth/p/5406831.html
不存在数据依赖关系就别await嘛,看nodejs多了都不会正常编程了吗…
了解异步需要先了解什么是阻塞 异步和多线程都是解决阻塞时占用资源的问题(通常是cpu资源)
之所以大家会说Promise是用同步的方式处理异步是因为js里面大部分异步的逻辑是写在函数对象里的…异步还存在一个流程控制的问题…异步的流程控制不在js线程之上…Promise的resolve和reject会把异步函数的执行结果取出来而已…用Promise可以让代码读起来像是同步
@htoooth 特别棒的文章。 我自己再看一下深入浅出的异步那章。 谢谢你
来自酷炫的 CNodeMD
async/await 只是异步封装语法糖,并不是真正的变成了同步,该异步还是异步,只是通过语法糖封装了执行顺序