专题1234导航

关于ES6 generator函数 的异步机制

来源:互联网
发表时间:2017/4/20 15:57:18
责任编辑:李志喜
字体:
为了帮助网友解决“关于ES6 generator函数 的异步机制”相关的问题,mr007通过互联网对“关于ES6 generator函数 的异步机制”相关的解决方案进行了整理,用户详细问题包括:本帖最后由 myepoch 于 2017-04-20 13:38:52 编辑我在本机通过node test.js执行

function step1 (){
for(let n=0;n<1000000000;n++){}//模拟耗费时间,然后期望异步执行其他代码
return "A";
}

function step2 (){
return "B";
}

function* longRunningTask() {
  
  var value1 = yield step1();  //此处异步调用
  var value2 = yield step2();  //此处异步调用
 
  return ("ok");
}

var task = longRunningTask();
let a = task.next().value;//此处调用异步step1方法,该方法模拟耗时,期望能异步此方法的同时,能先打印出"为什么我最好打出来。"
console.log(a);
let b = task.next(a).value;
console.log(b);
console.log("为什么我最好打出来。");


实际结果:
先打出:A
再打出:B
最后打出:为什么我最好打出来。

期望结果:
先打出:为什么我最好打出来。
再打出:A
最后打出:B

是不是因为我node test.js这么跑只能是单线程一步一步执行,如果放到WEB环境就可以实现异步(在执行STEP1的同时,因为step1耗时,就先执行‘为什么我最后打出来’)了呢?,具体解决方案如下:
解决方案1:

function step1 (){
            for(let n=0;n<1000000000;n++){}//模拟耗费时间,然后期望异步执行其他代码
            return "A";
        }

        function step2 (){
            return "B";
        }

        function* longRunningTask() {
            var value1 = yield step1();  //此处异步调用
            var value2 = yield step2();  //此处异步调用
            return ("ok");
        }

        Promise.resolve(longRunningTask()).then(function(task){
            let a = task.next().value;
            console.log(a);
            let b = task.next(a).value;
            console.log(b);
        });
        console.log("为什么我最好打出来。");

generator不是异步的啊 
www.xue163.com true http://www.xue163.com/588880/39215/392158318.html report 3201 关于ES6 generator函数 的异步机制:解决方案1:function step1 (){            for(let n=0;n<1000000000;n++){}//模拟耗费时间,然后期望异步执行其他代码            return "A";&...
相关信息
最近关注
首页推荐
热门图片
最新添加资讯
24小时热门资讯
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. mr007 版权所有
京ICP备10044368号-1 京公网安备11010802011102号