async为什么使用不了 node环境是7.2.1 es6(已解决)
发布于 8 年前 作者 hfqf 5966 次浏览 来自 问答

刚学node没多久,目前在学习es6,弄个async例子跑跑看的,没想到搞不定,麻烦谁帮我看看原因。 开始没引入async库时,关键字async是有颜色的,我以为能识别 untitled2.png

引入了async库,改了名字,还是不行 untitled3.png

14 回复

你装了几个版本的node?你用的ide的运行node的环境有没有选择对?通过命令行运行试试,看看有没有这个问题

@liujavamail untitled1.png 应该没错 就是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 7FB5BDA6-4185-4C21-A649-4CD7AC325F8A.png

@KingTree untitled1.png 这个对的 . 为什么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 untitled1.png 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

回到顶部