2017-04-08 10 views
0

_.some()を非同期で使用する方法はありますか?私はタイムアウトの問題を引き起こさないように非同期メソッドに切り替えようとしている以下のコードスニペットを持っています。非同期で_.someを使用する方法

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は使用可能です。

任意およびすべてのヘルプは、

スコット

+1

'DLClear'関数(と' _.some')がIOバインディングではなく "ビジー"関数なので、非同期コードはここで助けになりません。あなたのコードがあなたの環境で実行するのに時間がかかりすぎる場合は、非効率なアルゴリズムを使用していることを示唆しています。あなたの 'segmentIntersection'関数は何をしますか? 'wallSegments'配列の大きさはどれくらいですか? – Dai

+0

これは、仮想テーブルトップ(VTT)ゲームプラットフォームのスクリプト用です。 segmentIntersectionは、渡されたセグメントが任意の点で交差するかどうかを判定します。 wallSegments配列のサイズは固定されていません。これは、ユーザーがVTTに作成した壁セグメントの数に依存します。したがって、1エントリになることもあれば、数百または数千(おそらく1000倍の誇張)である可能性もあります。私が知っているのは、私が使っているものではありませんが、実行する前にコールスタックを待つために_.defer()のようなものに切り替える方法はありますか? –

答えて

0

あなたはNode.jsので使用するための機能がお手伝いします.eachこの場合のために設計されasyncライブラリを使用することができ感謝しています。

+0

残念ながら、このライブラリはプラットフォームでは使用できません。追加のライブラリをインストールすることはできません。 –

+0

@ScottCaseyどのプラットフォームですか?具体的な要件がある場合は、具体的な情報を提供することが最善の方法です(たとえば、UIがブロックされないようにするために、プラットフォームに何らかのサービスワーカーを提供するか、スポーンするなど)。 –

+0

@DaveNewtonプラットフォームはRoll20 APIです –

関連する問題