大佬教程收集整理的这篇文章主要介绍了JavaScript – 从生成器中使用的迭代器回调产生,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我们有一个数组var myArray = [1,2,3,4,6];
我们想要通过它.
在一个非发电机的情况下,你会简单的
@H_495_7@myArray.forEach(function(k) { console.log(k); });但是,当您无法生成非生成函数时,因此如果在此循环内部,我们必须执行一些异步工作,则需要执行以下操作.
var foreach = function* (arr,fn) { var i; for (i = 0; i < arr.length; i++) { yield * fn(arr[i],i); } }; yield* foreach(myArray,function* (k) { var a = yield fs.readFile(); });
哪种吮吸
任何人知道使用发电机的匿名功能的方法?因为这样,我们失去了整个lodash图书馆.
注意:我正在使用Traceur将代码编译成ES6,同时启动生成器.
注意:我没有使用CO().我正在使用下面的自定义生成器函数
var run = function(generatorFunction) { var generatorItr = generatorFunction(resumE); function resume(callBACkvalue) { generatorItr.next(callBACkvalue); } generatorItr.next(); };
_([1,3]).any(function(X) { var shouldWestopLooping = x % 2 == 0; return shouldWestopLogging; });
你反而希望使“我们应该停止循环”代码中断从正常的执行,然后回来,这是不可能的传统的JS(收益是相对较新的语言),因此是不可能的在Underscore / Lodash :
_([1,3]).any(function(X) { var shouldWestopLooping = $.ajax(...); // Doesn't work; code keeps going return shouldWestopLogging; });
你可以采取两种方法,这两种方法都不是理想的.
正如评论中所提到的,一种方法是先做所有的“推迟”工作,然后重复:
var workInProgress = _([1,3]).map(someAjaxOperation); $.when.apply(workInProgress).done(doSomethingBasedOnAjaxResults);
但是(同样在评论中也注意到)并不完全相同,因为您在数组的所有元素(与一个真正的生成器)之间进行AJAX工作时,只需要遍历尽可能多的数量来查找“赢家”).
另一种方法是消除异步. jQuery允许您将async:false传递给AJAX请求,该请求通过让您使用Underscore / Lodash / any …来解决问题,但它也会锁定用户的浏览器,只要执行AJAX工作即可,这可能不是你想要的.
不幸的是,如果你想使用一个像Underscore / Lodash这样的图书馆,那我们可以看到的唯一选择.您唯一的其他选择是编写自己的Underscore / Lodash组合,这真的不是那么难.我建议这样做,因为它将允许您仍然利用这些库中的所有其他伟大的功能,同时仍然以一致的方式进行迭代.
以上是大佬教程为你收集整理的JavaScript – 从生成器中使用的迭代器回调产生全部内容,希望文章能够帮你解决JavaScript – 从生成器中使用的迭代器回调产生所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。