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让写写异步代码就跟写同步代码一样 这句话理解不能 困扰了很久,我觉得是我误解了,但是看很多资料感觉也没能理解 第一次在社区提问,求解答
async function task (name, message, delay = 1) {
await new Promise(resolve => setTimeout(resolve, 1000 * delay))
return console.log(`${name}: ${message}`)
}
;(async function () {
task('A', '我太慢了,大家不用等我。', 3)
task('B', '我有急事,先走一步。', 0)
await task('C', '后面的等我一下……')
task('D', 'C 挡住我了。')
})()
我想上面的代码把你的问题解释清楚了……阻塞不阻塞要看你怎么写,并不强制一定要 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可以让代码读起来像是同步
async/await 只是异步封装语法糖,并不是真正的变成了同步,该异步还是异步,只是通过语法糖封装了执行顺序