如何异步使用_.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的主要内容,如果未能解决你的问题,请参考以下文章
[JavaWeb]_[中级]_[在jfinal里如何启用异步请求-异步模式]
[JavaWeb]_[中级]_[在jfinal里如何启用异步支持-异步模式]