刚学node没多久,目前在学习es6,弄个async例子跑跑看的,没想到搞不定,麻烦谁帮我看看原因。 开始没引入async库时,关键字async是有颜色的,我以为能识别
引入了async库,改了名字,还是不行
node green 需要 harmony flag
你装了几个版本的node?你用的ide的运行node的环境有没有选择对?通过命令行运行试试,看看有没有这个问题
@liujavamail 应该没错 就是7.2.1
厉害了 word 哥! async await 是ES7语法, 不需要引包的。 require(‘async’); 这个是一个类库 -> https://github.com/caolan/async
案例:
let sleep = function (time) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
// 返回 ‘ok’
resolve('ok');
}, time);
})
};
let start = async function () {
let result = await sleep(3000);
console.log(result); // 收到 ‘ok’
};
start();
@KingTree 哈哈 兄台给力
@hfqf 你用的是webStorm 吧。 设置识别js版本 es6
@KingTree 这个对的 . 为什么async直接就被识别成关键字呢 不是说es7才内置支持的吗
@hfqf 是内置了,但是默认是关闭的。你需要手动启动 Node运行参数里加上–harmony或者–harmony-async-await
node --harmony-async-await test.js
你可以看下这篇文章 体验异步的终极解决方案-ES7的Async/Await
@KingTree es6还无法直接使用内置的ansyc吧? 刚才看了下 说是需要babel转换下
@hfqf 启动的时候 node app.js --harmony await后面跟Promise就可以了
这里有两个不同的东西,容易混淆,分别是: async/await机制:Ecma Script 7的特性,用于简化“异步同步化”写法的新语法,现阶段还处于测试阶段,Nodejs需要在执行的时候后面添加–harmony参数以开启尚在测试阶段的功能。 async库:这是一个非常著名也非常有用的工具库,在ES5时期就出现了,主要是用来进行流程控制,比如先异步IO处理100个对象,等全部处理完再做下一个操作。
二者是完全不同的概念、不同的功能,就像是javascript与java一样。
@hfqf node版本从 v7.0+ 才内置 async await 语法。默认是关闭的。
@SvenZhao 我现在用的还是es6 准备先用async三方库, 等es7出来后再用内置的async
@libook 谢谢 明白了 我先用async三方库, 等es7稳定版出来后再用内置的async