如何异步使用_.some

Posted

技术标签:

【中文标题】如何异步使用_.some【英文标题】:How to asynchronously use _.some 【发布时间】:2017-09-03 12:40:49 【问题描述】:

有没有办法异步使用_.some()?我有下面的代码 sn-p 我正在尝试切换到异步方法以防止它导致超时问题。

DLClear = function( obj, squarePt ) 

    var wallPaths = findObjs( 
         _type  : 'path',
         _pageid: obj.get('pageid'),
        layer   : 'walls'
     );

    var landingPt    = [ obj.get('left'), obj.get('top'), 1 ];
    var wallSegments = PathMath.toSegments( wallPaths );
    var squareSeg    = [ landingPt, squarePt ];

    var blocked = _.some( wallSegments, function( wallSeg ) 
        return PathMath.segmentIntersection( squareSeg, wallSeg );
     );
    return !blocked;
,

我正在编写的平台是使用 javascript ES7,所以 async/await 是可用的。

感谢所有帮助,

斯科特

【问题讨论】:

异步代码在这里对您没有帮助,因为您的 DLClear 函数(和 _.some)不是 IO 绑定的,而是一个“忙”函数。如果您的代码在您的环境中执行时间过长,则表明您使用的算法效率低下。你的segmentIntersection 函数有什么作用? wallSegments 数组有多大? 这是用于虚拟桌面 (VTT) 游戏平台的脚本。 segmentIntersection 确定传递给它的线段是否在任何点相交。 wallSegments 数组的大小不固定。这取决于用户在 VTT 上创建了多少墙段,因此可能是 1 个条目,也可能是几百或几千个(好吧,可能是几千个夸张)。我知道 _.some() 不是我最终会使用的,但是有没有办法可以将它切换为使用 _.defer() 之类的东西来等待调用堆栈在运行前完成? 【参考方案1】:

您可以使用专为与 Node.js 一起使用而设计的 async 库,对于这种情况,每个函数都会为您提供帮助。

【讨论】:

很遗憾,该库在平台上不可用,我无法安装其他库。 @ScottCasey 什么平台?如果您有特定要求,最好提供特定信息,例如,如果问题是您不想阻止 UI,平台可能会提供某种形式的服务工作者或生成。 @DaveNewton 平台是 Roll20 API @ScottCasey 这不是在浏览器中运行吗? @DaveNewton 是的,它都是基于浏览器的。您可以运行自定义脚本来添加功能。

以上是关于如何异步使用_.some的主要内容,如果未能解决你的问题,请参考以下文章

内存 SPIKE - 提升 ASIO 异步读取

如何将Ajax请求从异步改为同步

[JavaWeb]_[中级]_[在jfinal里如何启用异步请求-异步模式]

[JavaWeb]_[中级]_[在jfinal里如何启用异步支持-异步模式]

[JavaWeb]_[中级]_[在jfinal里如何启用异步请求-异步模式]

[JavaWeb]_[中级]_[在jfinal里如何启用异步请求-异步模式]