CNode

async为什么使用不了 node环境是7.2.1 es6(已解决)

问答
Hhfqf发布于10 年前最后回复10 年前14 回复6918 浏览0 收藏

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

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

查看回复

回复 (14)

D
DevinXian#1·10 年前

node green 需要 harmony flag

L
liujavamail#2·10 年前

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

S
SunilWang#4·10 年前

厉害了 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();
S
SunilWang#6·10 年前
引用 hfqf@KingTree 哈哈 兄台给力

@hfqf 你用的是webStorm 吧。 设置识别js版本 es6 7FB5BDA6-4185-4C21-A649-4CD7AC325F8A.png

H
hfqf#7·10 年前
引用 SunilWang@hfqf 你用的是webStorm 吧。 设置识别js版本 es6

@KingTree untitled1.png 这个对的 . 为什么async直接就被识别成关键字呢 不是说es7才内置支持的吗

S
SunilWang#8·10 年前
引用 hfqf@KingTree 这个对的 . 为什么async直接就被识别成关键字呢 不是说es7才内置支持的吗

@hfqf 是内置了,但是默认是关闭的。你需要手动启动 Node运行参数里加上--harmony或者--harmony-async-await

node --harmony-async-await test.js

你可以看下这篇文章 体验异步的终极解决方案-ES7的Async/Await

S
SvenZhao#10·10 年前
引用 hfqf@KingTree es6还无法直接使用内置的ansyc吧? 刚才看了下 说是需要babel转换下

@hfqf 启动的时候 node app.js --harmony untitled1.png await后面跟Promise就可以了

L
libook#11·10 年前

这里有两个不同的东西,容易混淆,分别是: async/await机制:Ecma Script 7的特性,用于简化“异步同步化”写法的新语法,现阶段还处于测试阶段,Nodejs需要在执行的时候后面添加--harmony参数以开启尚在测试阶段的功能。 async库:这是一个非常著名也非常有用的工具库,在ES5时期就出现了,主要是用来进行流程控制,比如先异步IO处理100个对象,等全部处理完再做下一个操作。

二者是完全不同的概念、不同的功能,就像是javascript与java一样。

S
SunilWang#12·10 年前
引用 hfqf@KingTree es6还无法直接使用内置的ansyc吧? 刚才看了下 说是需要babel转换下

@hfqf node版本从 v7.0+ 才内置 async await 语法。默认是关闭的。

H
hfqf#13·10 年前
引用 SvenZhao@hfqf 启动的时候 node app.js harmony await后面跟Promise就可以了

@SvenZhao 我现在用的还是es6 准备先用async三方库, 等es7出来后再用内置的async

参与回复
登录后即可参与回复。登录